说我有这样的脚本:
<script type="text/javascript" src="myScript.js">
我在网上看到一些消息来源声称如果省略charset
属性,则默认为ISO-8859-1。我见过其他人声称它采用与包含脚本标记的HTML页面相同的编码。真相是什么?
我需要知道,因为我的JavaScript文件包含将插入HTML的文字字符串,其中包括非ASCII字符,如欧元符号(€)。我意识到添加一个charset属性或只是编码这些字符的HTML应该可以解决我的问题,但我仍然想了解默认行为。
编辑:为了澄清一点,我不仅需要知道标准的含义,还要了解浏览器的实际行为。此处描述的行为:http://joconner.com/2008/09/javascript-file-encoding/似乎表明浏览器不总是假设ISO-8859-1。
答案 0 :(得分:6)
w3c有一个浏览器确定字符编码的标准方法,你可以在这里阅读:http://www.w3.org/TR/html4/charset.html#spec-char-encoding
总而言之,符合要求的用户代理必须 请注意以下优先事项 确定文档的字符 编码(从最高优先级到 最低):
- “Content-Type”字段中的HTTP“charset”参数。
- META声明,其中“http-equiv”设置为“Content-Type”,并为“charset”设置值。
- 在指定外部资源的元素上设置的charset属性。
醇>除此之外 优先级列表,用户代理可以 使用启发式和用户设置。对于 例如,许多用户代理使用 启发式来区分各种 用于日文文本的编码。 此外,用户代理通常具有 用户可定义的本地默认值 它们适用的字符编码 没有其他指标。
答案 1 :(得分:2)
根据w3schools.com,该值为ISO-8859-1,并且所有主流浏览器都支持此功能。
当发送方未提供显式字符集参数时,“text”类型的媒体子类型被定义为在通过HTTP接收时具有默认字符集值“ISO-8859-1”。除“ISO-8859-1”或其子集之外的字符集中的数据必须用适当的字符集值标记。有关兼容性问题,请参阅3.4.1部分。
因此,任何不符合此要求的内容在技术上都不符合HTTP 1.1规范。
答案 2 :(得分:1)
HTML5 4.11.1脚本元素:
如果脚本元素具有charset属性,则让脚本块的此脚本元素的字符编码是从charset属性的值获取编码的结果。
否则,让脚本块的此脚本元素的后备字符编码与文档本身的编码相同。
引用链接到DOM document
元素,该元素具有encoding
属性。
TODO:找出如何根据标准确定该对象的编码。
答案 3 :(得分:0)
HTML编码字符串并将它们传递给javascript变量会导致问题,特别是如果你使用十六进制代码作为js我被告知更喜欢八进制。
如果您可以使用utf-8作为网页的字符集,那么js可以正常工作。我经常使用它,并且从未需要为包含的脚本文件定义字符集。