2012-04-21 153 views

回答

7

如果您的javascript文件使用与页面不同的编码进行编码,您可以使用charset属性告诉浏览器如何解释它。

例如,如果页面使用的是Latin1,但JS文件是使用UTF-8创建的。

+1

尽管在我看来,最好是将编码放在返回脚本的响应头部。 – GolezTrol 2012-04-21 09:53:05

+1

@GolezTrol - 它会更好,但并不是所有的网页作者都拥有对标题的控制权。 – Oded 2012-04-21 09:57:56

+1

如果页面正在使用其他编码(在我的情况下为euc-kr)并且JS使用UTF8,则通过调用document.write()或设置某个元素的innerHTML编写的某些文本将在编码中正确编码(euc -kr)不是UTF8? – 2012-04-21 10:37:36

3

每个JavaScript文件都是一个独立于页面的元素,毕竟你甚至可以从一些远程作者的服务器加载JS,否则这些服务器与你的页面根本没有任何关系。就像其他任何外部元素一样,如果远程服务器出于某种原因返回错误的字符集,或者只是为了确定,您可以手动指定“字符集”。另外,如果你自己有写入这个JS文件的权限,你可能想用Unicode位置转义替换所有的非ASCII码 - 这将保证符号总是能被正确解释,不管在头文件中指定了什么编码。一些JS缩小器,比如Google Closure Compiler,可以自动为你做。

+0

那么哪个优先? '脚本charset'或包含的js文件的标题字符集? – Pacerier 2014-10-06 12:17:08

5

charset参数的用途是指定在HTTP协议级别未指定编码的情况下外部脚本的编码。它是而不是,意思是覆盖HTTP标头中的编码信息,而不是这样做。

当作者无法控制HTTP标头并且标头未指定字符编码时,这非常有用。它对离线文件也很有用,例如直接访问网页的本地副本,而不是通过HTTP服务器,因此不存在HTTP头。

实际上,它不是很有用。如果您需要在JavaScript文件中使用非Ascii字符,则可以使用UTF-8编码。如果您使用具有领先BOM的UTF-8,则BOM可作为有用的指标,让浏览器推断编码。但它并没有伤害额外使用charset=utf-8

+0

你确定包含的JS文件的头文件中指定的字符集的优先级高于主HTML页面中指定的显式字符集的优先级吗?这是在真实的浏览器**在野外**测试的吗? – Pacerier 2014-10-06 12:26:04

+1

是的,在Firefox,Chrome,IE(Win 7)中测试过。测试页面:http://www.cs.tut.fi/~jkorpela/test/js/demo.html – 2014-10-06 12:53:05

相关问题