Unicode 5与Unicode 2(ECMAScript 4)有何不同?

时间:2017-02-16 21:23:59

标签: unicode character-encoding utf ecmascript-4

请原谅,我真的需要知道结合的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#codePointAtString#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代码不同,这也很好。

0 个答案:

没有答案