JavaScript 本身没有默认的字符编码。就规范而言,JavaScript 程序是一系列抽象字符。当通过网络传输或仅存储在计算机中时,抽象字符必须以某种方式进行编码,但其机制不受 ECMAScript 标准的控制。
ECMAScript标准的第 6 节使用 UTF-16 作为参考编码,但没有将其指定为默认编码。使用 UTF-16 作为参考在逻辑上是不必要的(参考 Unicode 数字就足够了),但它可能被认为可以帮助人们。
不应将此问题与字符串文字或一般字符串的解释相混淆。像“Φ”这样的文字需要与程序的其余部分一起进行某种编码;这可以是任何编码,但在解析编码后,文字将根据字符的 Unicode 编号解释为整数。
当通过 Internet 传输 JavaScript 程序(如“外部 JavaScript 文件”)时,适用RFC 4329,脚本媒体类型。第 4 条定义了机制:主要检查诸如 HTTP 标头之类的标头,并且charset
那里的参数将被信任。(实际上,Web 服务器通常不会为 JavaScript 程序指定这样的参数。)其次,应用 BOM 检测。否则,将隐含 UTF-8。
该机制的第一部分有些模棱两可。它可能被解释为charset
仅与实际 HTTP 标头中的参数相关,或者可能被扩展到元素中的charset
参数。script
如果 JavaScript 程序嵌入在 HTML 中,无论是通过script
元素还是某个事件属性,那么它的字符编码当然与 HTML 文档的字符编码相同。指定 HTML 4.01 规范的字符编码部分定义了解析机制,按以下顺序:charset
在 HTTP 标头中,charset
在 中meta
,charset
在访问文档所遵循的链接中,最后是启发式(猜测),这可能涉及很多事情;参看。HTML5 草案中复杂的解析机制。