如何在INDIVIDUAL JS文件中声明字符编码?

时间:2012-01-12 10:06:55

标签: javascript encoding character-encoding

我们可以通过以下代码在INDIVIDUAL CSS文件中声明字符编码:

@charset "UTF-8";

我的问题是:

如何在INDIVIDUAL JS文件中声明字符编码?

如果我发送一个JS文件给我的朋友,我希望他(她)能够在他(她)开始浏览或编辑这个JS文件时,从代码本身中理解这个JS文件的字符编码。

谢谢!

3 个答案:

答案 0 :(得分:14)

你做不到。但是,您可以使用script tag在将文件带入页面的charset attribute中对其进行定义。这必须与您提供文件的charset中的Content-Type匹配(如果有)。引用:

  

charset属性提供外部脚本资源的字符编码。如果src属性不存在,则不能指定该属性。如果设置了该属性,则其值必须是有效的字符编码名称,对于该编码的ASCII case-insensitive match必须是preferred MIME name,并且必须与charset参数中的// Encoding: UTF-8 参数匹配。外部文件的Content-Type metadata,如果有的话。 [IANACHARSET]

重新编辑:

  

如果我将一个JS文件发送给我的朋友,我希望他(她)能够在他(她)开始浏览或编辑这个JS文件时,从代码本身中理解这个JS文件的字符编码。

为此,你几乎必须告诉他/她。如果文件是UTF-8或Windows-1252或ISO 8859-1,遗憾的是没有可用编码的文件内指示符,所以我在开头包括注释:

{{1}}

如果您使用的是UTF-16或UTF-32,您应该能够告诉编辑使用BOM,其他编辑应该看到并理解(如果他们是Unicode感知的话)编辑)。这通常只适用于您在需要大量多字节字符的文本(语言)中编写注释,并且如果您对代码的注释比例高(因为代码是用西方文本编写的),当然欢迎您使用任何您喜欢的编码。只是如果注释与代码的比例较低,即使注释是在需要大量四字节字符的文本中,你最好还是坚持使用UTF-8,因为代码每个字符只需要一个字节。 (在UTF-16中,您的注释中可能有更多的双字节而不是四字节字符,但代码总是需要每个字符两个字节;而在UTF-32中,每个字符需要四个字节。所以整体而言即使评论占用的空间较小,文件可能会更大。但是,如果我正确地猜测你的问题原因,我可能会告诉你你已经知道的事情比我好得多。)

答案 1 :(得分:3)

没有用于在文件中声明编码的JavaScript构造,就像在CSS中一样。在传递数据时,应将编码传达给收件人。将文件作为电子邮件附件发送时,您的电子邮件程序可能包含也可能不包含指示编码的Content-Type标头(但可能很难确定编码可能是什么)。

您也可以在UTF-8编码文件的开头添加字节顺序标记(BOM)。尽管UTF-8中没有字节顺序问题,但BOM充当了一个有用的指标 - 以UTF-8编码构成BOM的字节开头的文件很可能是UTF-8编码的。这就是在没有其他指示的情况下,程序可以很好地推断编码的原因。这当然不是100%可靠,但是有用的东西。

许多文本编辑器都可以选择将文件保存为“使用BOM编码的UTF-8”。

(在网页上,BOM一度被认为是一种风险,因为观察到浏览器将其视为字符数据。现在,即使是UTF-8,BOM也很有用而不是风险。)

答案 2 :(得分:3)

如果您有兴趣以人类可读的方式指示文件的编码,T.J. Crowder's想法(向// Encoding: UTF-8等文件添加注释)就是这样。正如Jukka K. Korpela所指出的那样,您也可以使用BOM。

但是如果你想用一种机器可读的方式来表示文档中声明的字符集,还有其他几种方法:

例如,在Apache httpd服务器上,您可以使用以下任何声明:

  1. AddDefaultCharset UTF-8
  2. AddCharset UTF-8 .js
  3. AddType 'application/javascript; charset=UTF-8' js *
  4. *我对使用"application/javascript"超过"text/javascript"的情况不感兴趣。但如果你有兴趣知道为什么一个或另一个可能更好,参见https://stackoverflow.com/a/4101763/1070047。但是,考虑到这个主题,application/javascript似乎非常合适(特别是如果您打算使用BOM,因为它表明代码应该被视为二进制)。

    如果代码将被解释/处理/编译为服务器端(例如PHP),您可以在文档中设置标题,例如......

    header("Content-Type: application/javascript; charset=utf-8");

    至少在PHP中,确保在任何输出发生之前添加该头语句。

    最后,在确定使用哪个声明时,请考虑(当理解/尊重,即不在IE中)时,BOM具有比文档标题更大的权限。两者都优先于链接/源代码字符集声明(如<script type="application/javascript" src="script.js" charset="utf-8"></script>)。