对于具有建议字符数据的Content-Types的HTTP响应,如果没有指定,那么客户端应该采用哪个charset?

rew*_*wbs 12 content-type default http character-encoding rfc2616

如果在Content-Type标头中没有指定charset参数,则RFC2616第3.7.1节似乎暗示对于子类型"text"的媒体类型应假定ISO8859-1:

当发送方未提供显式字符集参数时,"文本"类型的媒体子类型被定义为在通过HTTP接收时具有默认字符集值"ISO-8859-1".

除"ISO-8859-1"或其子集之外的字符集中的数据必须用适当的字符集值标记.

但是,我经常看到提供具有Content-Type值的Javascript文件的应用程序,例如"application/x-javascript"(即没有charset param),即使这些脚本包含非ASCII UTF-8字符,如果被解释则会损坏作为ISO8859-1.

这似乎不会给客户带来问题.客户如何知道将字节解释为UTF-8?是否存在其他字符数据子类型的规则,暗示UTF-8应该是默认值?这记录在哪里?

Sag*_*agi 15

我检查过的所有主流浏览器(IE,FF和Opera)完全忽略了本部分中的RFC规范.

如果您对通过数据自动检测字符集的算法感兴趣,请查看Mozilla Firefox链接.

关于内容类型的一个小注释:只有文本具有字符集.假设浏览器处理application/x-javascript与处理text/javascript(IE6除外,但这是另一个主题)相同是合理的.

Internet Explorer将使用默认字符集(可能存储在注册表中),如下所示:

默认情况下,Internet Explorer使用服务器返回的HTTP内容类型中指定的字符集来确定此转换.如果未指定此参数,Internet Explorer将使用文档中元元素指定的字符集.如果未指定元素,它将使用用户的首选项.

来源:http://msdn.microsoft.com/en-us/library/ms537500%28VS.85%29.aspx

Mozilla Firefox尝试自动检测字符集,如下所示:

本文提出了三种类型的自动检测方法,用于在没有明确的字符集声明的情况下确定文档的编码.

资料来源:http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html

Opera也使用自动检测,如下所述:

如果传输协议提供了编码名称,则使用该名称.如果没有,Opera将查看页面以获取charset声明.如果缺少这个,Opera将尝试自动检测编码,使用域名查看脚本是否为CJK脚本,如果是,则为哪一个.Opera还可以自动检测UTF-8.

资料来源:http://www.opera.com/docs/specs/opera9/