【问题标题】:editor is utf8, javascript spec expects utf16编辑器是 utf8,javascript 规范需要 utf16
【发布时间】:2018-04-21 06:28:40
【问题描述】:

ECMAScript 规范说明如下:

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

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

多年来我一直在编写 javascript,我的编辑器配置为 utf8 编码。为什么我从来没有遇到过字符串问题?我主要用简单的英语和偶尔的表情符号发送代码。 为什么我的代码是 utf8 编码时从来没有遇到过问题,而规范说你需要 utf16?

【问题讨论】:

  • 字符串和你的代码不同。
  • 因为向下兼容?如果反过来,它可能会破裂。
  • Same section 目的是将从外部进入执行环境的文本数据(例如,用户输入、从文件读取或通过网络接收的文本等)转换为 Unicode在运行的程序看到它之前规范化 Form C。 所以不管你的文件是什么,执行环境都会在处理它之前将它转换为 UTF-16

标签: javascript utf-8 utf-16


【解决方案1】:

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

JavaScript 源代码的文本格式和编码是完全不同的事情。为此,您需要阅读 section 6, Source Text。诚然,它说解析器也对文本的 16 位代码单元进行操作(但它假设它们是 unicode 规范化的)。它还指出

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

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

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2011-12-03
    • 1970-01-01
    • 2012-03-05
    • 2011-03-29
    • 2015-12-13
    相关资源
    最近更新 更多