在HTML的meta标签中还是HTTP头中声明字符集更好?

6
我正在解析许多网站,所有工作都很顺利,我也在读取字符集声明以转换编码。现在我遇到了一个问题,与http://celleheute.de/sonntagsfuhrung-3/有关。
HTML meta标签显示内容采用ISO-8859-2编码,但HTTP头却显示UTF-8编码。实际上,内容是UTF编码的,因此当我的解析器尝试将内容转换为ISO时,会破坏一些字符。
现在我的问题是,我应该选择哪个声明?我应该忽略meta标签吗?如果我可以在HTTP头中找到声明,还是相反?大多数Web浏览器会怎么做?
2个回答

11
为了理解现代浏览器的工作原理,您应该从 http://w3c.github.io/html/syntax.html#determining-the-character-encoding开始阅读。
其中步骤一和步骤二与此问题最相关。它们说:
  1. 如果用户已明确指示用户代理使用特定编码覆盖文档的字符编码,则可以选择使用确切信心返回该编码并中止这些步骤。

  2. 如果传输层指定了编码,并且支持该编码,则使用确切信心返回该编码,并中止这些步骤。

这意味着真正的HTTP标头除了用户自定义设置外,优先级最高。
除此之外,情况可能会更加复杂。例如,字节顺序标记可以优先于meta标签。
更新:自回答撰写以来(大约在2012年中期左右),规范已更改,现在字节顺序标记优先于HTTP标头。

3

这个问题没有明确的答案。页面的作者给出了相互矛盾的信息,这是一种错误。哪一个是正确的可以通过抛硬币来决定。

总的来说,我更倾向于将HTTP头作为主要值。而meta标签只是作为后备方案。如果你想遵循任何逻辑,请首先尝试使用HTTP头中指定的字符集对文档进行解码。如果明显失败,因为某些字节在给定的编码中无效,则可以尝试使用meta标签中指定的字符集进行再次解码。如果仍然失败,则无法确定。

如果两者都不失败,但是编码冲突,那么请寻求人类帮助或对解码后的文本进行一些统计分析,这可能会告诉您哪一个更有可能是正确的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接