0

请原谅,我真的需要知道合并的 Unicode 版本 (5) 在 ECMAScript 4 中是如何工作的。我只需要知道它是如何编码或解码的,或者 ECMAScript 4 使用哪种编码。我说的是用于字符串的字符代码(或代码点,我认为)的编码。

忠告:“ultrapasses”在这里的意思是“大于”,或者更远,例如。我认为它在英语中是有效的。

我基本上认为它是 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 编码代码点时有一个小故障(虽然这不是错误,只是一个小故障),如果你想知道,只需检查我的问题。

0xFFFFFF是最大字符代码(或代码点......?)。为什么我认为它是 ECMAScript 4 中的字符代码?也许是因为 ECMAScript 6 中没有String#codePointAtString#fromCodePointlike,它真的脱离了 UCS-2。首先让我向您展示一些使用 ECMAScript 4 的测试:

(是的,ECMAScript 4 从未存在,但草稿,包括一个未完成的用于评估 ECMAScript 4 的虚拟机。http: //ecmascript.org已关闭,但仍在http://archive.org上,所以我做了一个小副本在7Zip 文件中)

 // 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)与 Unicode 代码转义不同也会很高兴。\u{...}

4

0 回答 0