编辑器是utf8,javascript规格期望utf16

时间:2018-04-21 06:28:40

标签: javascript utf-8 utf-16

ECMAScript规范说明如下:

  

当String包含实际文本数据时,每个元素都被视为单个UTF-16代码单元。无论这是否是String的实际存储格式,String中的字符都按其初始代码单元元素位置编号,就像它们使用UTF-16表示一样。对字符串的所有操作(除非另有说明)将它们视为未分化的16位无符号整数的序列;它们不能确保生成的String处于标准化形式,也不能确保语言敏感的结果。

来源:http://ecma-international.org/ecma-262/5.1/#sec-8.4

我使用utf8编码配置的编辑器已经编写了多年的javascript。为什么我从未遇到字符串问题?我使用ocasional表情符号以简单的英语发送大部分代码。 为什么我从未遇到过我的代码被utf8编码的问题,而规范说你需要utf16?

1 个答案:

答案 0 :(得分:1)

您引用了有关字符串类型的部分,该部分是关于JavaScript代码使用的字符串的运行时表示 - 例如它说明了charAt调用的行为方式。

JavaScript源代码的文本格式和编码是完全不同的事情。为此,您需要阅读section 6, Source Text。不可否认,它说解析器也可以在16位代码单元上运行(但它假设它们是unicode规范化的)。它还说明了

  

如果实际源文本以16位代码单位以外的形式编码,则必须将其处理为好像首次转换为UTF-16一样。

因此,当您发送编码为UTF-8(几乎是标准)的JS文件并发送相应的标头时,浏览器将解码UTF-8并根据语法规则解析结果。