繁体   English   中英

首选HTML元标记或HTTP标头中的字符集声明?

[英]Prefer charset declaration in HTML meta tag or HTTP header?

我正在解析很多网站。 一切正常,我正在读取转换编码的字符集声明。 现在我遇到了http://celleheute.de/sonntagsfuhrung-3/的问题。

HTML元标记说,内容编码为ISO-8859-2,但HTTP标头说,它是UTF-8。 实际上,内容是UTF编码的,所以当我的解析器尝试将内容转换为ISO时,它会破坏一些字符。

现在我的问题是,我更喜欢哪种声明? 我可以忽略元标记,当我可以在HTTP标头中找到声明,反之亦然? 大多数网络浏览器会做什么?

要了解现代浏览器的作用,您应该从http://w3c.github.io/html/syntax.html#determining-the-character-encoding开始阅读

第一步和第二步与问题最相关。 他们说

  1. 如果用户已明确指示用户代理使用特定编码覆盖文档的字符编码,则可选择以确定的置信度返回该编码并中止这些步骤。

  2. 如果传输层指定了编码,并且受支持,则返回具有置信度的编码,并中止这些步骤。

这意味着真正的HTTP标头优先于除用户覆盖之外的所有内容。

除此之外,它可能变得复杂。 例如,字节顺序标记可以优先于元标记。


更新:由于编写了这个答案,规范发生了变化(大约在2012年中期),因此字节顺序标记现在优先于HTTP标头。

根本没有答案。 该页面的作者通过提供有冲突的信息来提交错误。 哪一个是正确的也可以通过抛硬币来决定。

一般来说,我更喜欢HTTP标头作为主要值。 无论如何,元标记只是一个后备。 如果您想要遵循任何逻辑,首先尝试使用HTTP标头中指定的字符集解码文档。 如果这显然失败,因为某些字节在给定编码中无效,请再次尝试在元标记中指定的字符集中(如果有)。 如果仍然失败,所有投注都将被取消。

如果两者都没有失败但是编码冲突,要么涉及人类,要么对解码后的文本进行一些静态分析,这可能会告诉您哪种更可能是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM