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

rab*_*dde 6 html encoding http character-encoding metatag

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

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

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

Alo*_*hci 11

要了解现代浏览器的作用,您应该开始阅读http://dev.w3.org/html5/spec/parsing.html#determining-the-character-encoding

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

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

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

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

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


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