如果 Content-Type 标头中未指定字符集参数,RFC2616 第 3.7.1 节 http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html似乎意味着 ISO8859-1 应该被假定为子类型“文本”的媒体类型:
当没有明确的字符集参数时
由发送者提供,媒体子类型
“文本”类型的定义为
默认字符集值为
通过 HTTP 接收时为“ISO-8859-1”。
字符集以外的数据
“ISO-8859-1”或其子集必须是
用适当的字符集标记
价值。
然而,我经常看到应用程序提供带有 Content-Type 值的 Javascript 文件,例如“application/x-javascript”(即没有字符集参数),即使这些脚本包含非 ASCII UTF-8 字符,如果解释这些字符就会损坏作为 ISO8859-1。
这似乎不会给客户带来问题。客户端如何知道将字节解释为 UTF-8?对于其他字符数据子类型是否存在暗示 UTF-8 应为默认值的规则?这是在哪里记录的?
我完全检查过所有主要浏览器(IE、FF 和 Opera)忽略 RFC 规范在这部分。
如果您对通过数据自动检测字符集的算法感兴趣,请查看火狐浏览器 http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html link.
关于内容类型的一个小注释:只有文本才有字符集。可以合理地假设浏览器处理 application/x-javascript 与处理 text/javascript 相同(IE6 除外,但这是另一个主题)。
IE浏览器将使用默认字符集(可能存储在注册表中),如下所示:
默认情况下,Internet Explorer 使用
HTTP 中指定的字符集
服务器返回的内容类型
确定这个翻译。如果这
未给出参数,互联网
资源管理器使用的字符集
由元元素指定
文档。它使用用户的
优先如果没有元元素
指定的。
Source: http://msdn.microsoft.com/en-us/library/ms537500%28VS.85%29.aspx http://msdn.microsoft.com/en-us/library/ms537500%28VS.85%29.aspx
火狐浏览器尝试自动检测字符集,如下所示:
本文提出了三种类型的自动检测方法来确定文档的编码没有明确的字符集声明.
Source: http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html
Opera也使用自动检测,如文档所示:
如果传输协议提供编码名称,则使用该名称。如果没有,Opera 将在页面中查找字符集声明。如果缺少此项,Opera 将尝试自动检测编码,使用域名查看该脚本是否是 CJK 脚本,如果是的话是哪一个。 Opera 还可以自动检测 UTF-8。
Source: http://www.opera.com/docs/specs/opera9/ http://www.opera.com/docs/specs/opera9/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)