请原谅,我真的需要知道结合的Unicode版本(5)如何在ECMAScript 4中工作。我只需要知道它是如何编码或解码的,或ECMAScript 4使用哪种编码。我说的是用于字符串的char代码(或我认为的代码点)的编码。
建议:“超越”在这里意味着“大于”,或者更进一步,例如。我认为它在英语中是有效的。
我基本上认为它是UTF-16,但对于我的测试,它超越了U + 10FFFF。我使用ECMAScript 4获得的最大字符代码是U + FFFFFF,除了当我使用 String.fromCharCode()
对此字符代码进行编码时,它会产生U + 1FFFFF( \u{...}
生成最多0xFFFFFF
个不同的字符,但String.fromCharCode()
生成最多0x1FFFFF
个不同的字符。在ECMAScript 6代码点中,我可以得到的最大值是U + 10FFFF,差别很小,并且由于它使用UCS-2(至少在我的浏览器中,Chrome),ECMAScript 6生成更多代码单元(代码单元= 2字节) ),我猜ECMAScript 6在使用UCS-2编码代码点时有一个小失败(虽然这不是bug,只是一个小小的失败),如果你想知道,只需检查我的question。
0xFFFFFF
是最大字符代码(或代码点......?)。为什么我认为它是ECMAScript 4中的字符代码?也许是因为ECMAScript 6中没有String#codePointAt
和String#fromCodePoint
之类的东西,而且它真的离开了UCS-2。首先让我用ECMAScript 4向您展示一些测试:
(是的,ECMAScript 4从未存在过,但草案,包括用于评估ECMAScript 4的未完成的虚拟机http://ecmascript.org已关闭,但仍在http://archive.org,所以我做了一个副本a 7Zip file)
// Decimal: 16777215
const ch = 0xffffff;
const chString = '\u{ffffff}';
// Ultrapasses the maximum char code (or code point), then
// an exception got thrown, well.
'\u{1000000}';
// Ultrapasses it too, but returns '\u{ charCode % 1000000 }' anyways.
String.fromCharCode(ch + 1);
// Correct.
chString.charCodeAt(0); // Code: 16777215
// I didn't expect this!!! \/
String.fromCharCode(ch); // Gives me '\u{1fffff}' back.
// An Unicode char code (which is code point, I think) is always
// equivalent to one character in the string.
chString.length; // 1
String.fromCharCode(ch).length; // 1
ECMAScript 4概述没有进一步讨论,它只提到它确实包含了Unicode 5,而不是编码。在这种情况下包含哪种编码?通过以上示例了解为什么 String.fromCharCode(charCode)
与 \u{...}
Unicode代码不同,这也很好。