请原谅,我真的需要知道合并的 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#codePointAt
和String#fromCodePoint
like,它真的脱离了 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{...}