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

时间:2012-01-03 17:13:25

标签: javascript utf-16

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

  

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

     

答:UCS-2是过时的术语,指的是Unicode   在代理代码点和之前执行到Unicode 1.1   UTF-16被添加到该标准的2.0版本中。这个词现在应该   要避免。

     

UCS-2没有定义不同的数据格式,因为UTF-16和UCS-2   对于数据交换而言是相同的。两者都是16位,并且有   完全相同的代码单元表示。

     

有时在过去,实施已被标记为" UCS-2"至   表示它不支持补充字符,也不支持   将代理代码点对解释为字符。这样的   实现不会处理字符属性的处理,   补充字符的代码点边界,整理等。

via: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

3 个答案:

答案 0 :(得分:18)

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

ECMAScript版本3和5的规范至少都明确声明一个String是一个无符号16位整数的集合,如果那些整数值是用来表示文本数据,那么它们就是UTF -16代码单元。参见the ECMAScript Language Specification的第8.4节。


编辑:我不再确定我的回答是完全正确的。请参阅上面提到的优秀文章http://mathiasbynens.be/notes/javascript-encoding,其实质上是说虽然JavaScript引擎可以在内部使用UTF-16,但大多数情况下,语言本身会有效地将这些字符暴露为UCS-2。

答案 1 :(得分:8)

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

答案 2 :(得分:2)

它只是一个16位值,ECMAScript标准中没有指定编码。

请参阅本文档中的7.8.4字符串文字:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

相关问题