我对大多数情况下的标头都有很好的理解Content-Type
。我理解,对于以下四个示例,您通常会在 MIME 类型后面加上charset=your-charset-here
。
Content-Type "text/plain; charset=utf-8"
Content-Type "text/html; charset=utf-8"
Content-Type "text/javascript; charset=utf-8"
Content-Type "text/xml; charset=utf-8"
... 并且对于图像,没有字符集:
Content-Type "image/gif"
Content-Type "image/x-icon"
etc.
但是这两个呢?它们应该包括吗charset
?
Content-Type "application/x-javascript"
Content-Type "application/xml"
我知道如果不包含字符集也没关系,但如果可能的话,我还是想包含它。毕竟它们只是基于文本的文件。
答案1
Content-Type "text/xml; charset=utf-8"
这是多余的。对于 XML,<?xml?>
声明优先于 Content-Type 标头。如果省略 XML 声明,则无论如何都会得到 UTF-8。
对于 XML,我通常会忽略字符集。鉴于 XML 有自己完善的内联字符编码机制,Content-Type 标头是不必要的,并且只有在意外为未指定字符集的文件选择错误类型(这些文件在encoding
其他地方都被视为 UTF-8)时才会造成问题。
有一次你做当您使用不兼容 ASCII 的字符集(通常是 UTF-16)时,XML 需要一个 charset 参数,否则解析器将无法读取<?xml
。但您很少会想这样做。UTF-16 不是一种很好的文件存储/网络格式。
Content-Type "application/xml"
媒体application/xml
类型由以下指定RFC3023charset
,并且已为其明确定义了一个参数。因此,您可以charset
根据需要使用(尽管如上所述,我通常不想要)。
Content-Type "application/x-javascript"
是一种非官方类型,因此没有规范说明charset
参数是否存在或可能做什么。应该避免使用这种类型,而应使用text/javascript
(传统)或application/javascript
(由RFC4329)。
实际上,charset
在 JavaScript 资源上设置并不够,因为 IE 会完全忽略它。
脚本字符集机制的优先级总结(从高到低):
IE:
<script charset>
属性,父页面的字符集Opera:脚本文件的字符集,父页面的字符集
Mozilla、Webkit:脚本文件的字符集、
<script charset>
属性、父页面的字符集