JavaScript字符串 - UTF-16与UCS-2?

pat*_*rjk 25 javascript utf-16

我在某些地方读过JavaScript字符串是UTF-16,而在其他地方它们是UCS-2.我做了一些搜索,试图弄清楚差异,发现这个:

问:UCS-2和UTF-16有什么区别?

答:UCS-2是过时的术语,在代理代码点和UTF-16被添加到标准的2.0版之前,它指的是Unicode 1.1之前的Unicode实现.现在应该避免使用这个术语.

UCS-2没有定义不同的数据格式,因为UTF-16和UCS-2在数据交换方面是相同的.两者都是16位,并且具有完全相同的代码单元表示.

有时在过去,实现被标记为"UCS-2"以指示它不支持补充字符并且不将代理代码点对解释为字符.这样的实现不会处理补充字符的字符属性,代码点边界,校对等的处理.

通过:http://www.unicode.org/faq/utf_bom.html#utf16-11

所以我的问题是,是因为JavaScript字符串对象的方法和索引作用于16位数据而不是字符,这使得有些人认为它是UCS-2?如果是这样,围绕字符而不是16位数据块的JavaScript字符串对象是否会被视为UTF-16?或者还有其他我想念的东西?

编辑:根据要求,这里有一些来源说JavaScript字符串是UCS-2:

http://blog.mozilla.com/nnethercote/2011/07/01/faster-javascript-parsing/ http://terenceyim.wordpress.com/tag/ucs2/

编辑:对于任何可能遇到此问题的人,请务必查看此链接:

http://mathiasbynens.be/notes/javascript-encoding

dgv*_*vid 18

严格来说,JavaScript,ECMAScript,早于Unicode 2.0,因此在某些情况下,您可能会发现对UCS-2的引用只是因为在编写引用时这是正确的.您能否指出我们将JavaScript作为"UCS-2"的特定引用?

ECMAScript版本3和5的规范至少都明确地将String声明为无符号16位整数的集合,并且如果这些整数值用于表示文本数据,则它们是UTF-16代码单元.请参阅ECMAScript语言规范的第8.4节.


编辑:我不再确定我的答案是完全正确的.请参阅上面提到的优秀文章,http://mathiasbynens.be/notes/javascript-encoding,实质上说,虽然JavaScript引擎可能在内部使用UTF-16,而大多数情况下,语言本身会有效地公开这些字符,就像他们是UCS-2.


Dan*_*ses 8

它是UTF-16/USC-2.它可以处理代理对,但是charAt/ charCodeAt返回一个16位字符而不是Unicode代码点.如果你想拥有它处理代理对,我建议通过快速阅读.

  • @ cubuspl42 UTF-16不限于0x0-0xFFFF,它可以编码16位字符对,代表整个Unicode范围从0x0-0x101000,超过一百万个代码点.这些对称为"代理对". (2认同)