ECMAScript规范说明如下:
当一个字符串包含实际文本数据时,每个元素被认为是一个UTF-16代码单元。无论这是否是字符串的实际存储格式,字符串中的字符都按照它们的初始代码单元元素位置编号,就好像它们是使用UTF-16表示的。字符串上的所有操作(除非另有说明)都将它们作为未区分的16位无符号整数序列处理;它们不确保结果字符串以规范化的形式存在,也不确保对语言敏感的结果。
来源:http://ecma-international.org/ecma-262/5.1/#sec-8.4
多年来,我一直在用utf8编码配置编辑器编写javascript。为什么我从来没有遇到过字符串问题?我主要是用简单的英文和字母符号发送代码。为什么我的代码在utf8编码时从来没有遇到过问题,而规范说您需要utf16?
发布于 2018-04-21 12:14:15
您引用的是关于字符串类型的部分,该部分是关于JavaScript代码处理的字符串的运行时表示--例如,它说明了charAt调用应该如何运行。
JavaScript源代码的文本格式和编码完全不同。为此,您需要阅读section 6, 。诚然,它说解析器也对16位文本代码单元进行操作(不过它假设它们是unicode标准化的)。它还指出
如果一个实际的源文本是以16位代码单元以外的形式编码的,则必须处理它,就像它首先被转换为UTF-16一样。
因此,当您发送编码为UTF-8的JS文件(这几乎是标准的)并发送适当的头时,浏览器将解码UTF-8并根据语法规则解析结果。
https://stackoverflow.com/questions/49953027
复制相似问题