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

IT技术 javascript utf-16
2021-02-18 06:59:03

我在某些地方读到 JavaScript 字符串是 UTF-16,而在其他地方它们是 UCS-2。我做了一些搜索以试图找出差异并发现:

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

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

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

3个回答

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。

谢谢你的链接,规范的语言似乎很清楚。我认为 UCS-2 的谈话要么过时,要么基于对代理对的方法和索引支持。
2021-05-06 06:59:03
因此,规范声明“序列中的每个整数值通常代表一个 UTF-16 文本的单个 16 位单元。但是,ECMAScript 对这些值没有任何限制或要求,只是它们必须是 16 位无符号整数。 ”,这相当于说在现代 C 程序中,字符数组中的每个字符值“通常”代表 UTF-8 文本的单个 8 位单元,但显然声明 C 字符串“是”UTF-8 是错误的. JavaScript 提供的语义只有 UCS-2;如果你想要 UTF-16 支持,你必须自己做,根据 DMoses 的回答。
2021-05-09 06:59:03
UCS 是带有数字的东西,是的 UCS 2 已经过时了,当前版本是 UCS 4。UTF-8/-16/-32 是用位表示 UCS 事物数组的方法。;)
2021-05-16 06:59:03

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

@cubuspl42 UTF-16 不限于 0x0-0xFFFF,它可以编码成对的 16 位字符并表示从 0x0-0x101000 的整个 Unicode 范围,超过一百万个代码点。这些对称为“代理对”。
2021-04-24 06:59:03
“它可以处理代理对”是什么意思?
2021-04-30 06:59:03
如果您阅读链接的文章,它将描述如何让它处理代理对。我的观点是默认情况下它不会出错,并且有一些方法可以处理代理对,如所提供链接上的代码所示。
2021-05-09 06:59:03

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

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