我正在解析很多网站.一切正常,我正在读取转换编码的字符集声明.现在我遇到了
http://celleheute.de/sonntagsfuhrung-3/的问题.
HTML元标记说,内容编码为ISO-8859-2,但HTTP标头说,它是UTF-8.实际上,内容是UTF编码的,所以当我的解析器尝试将内容转换为ISO时,它会破坏一些字符.
现在我的问题是,我更喜欢哪种声明?我可以忽略元标记,当我可以在HTTP标头中找到声明,反之亦然?大多数网络浏览器会做什么?
解决方法
要了解现代浏览器的功能,您应该从
http://dev.w3.org/html5/spec/parsing.html#determining-the-character-encoding开始阅读
第一步和第二步与问题最相关.他们说
If the user has explicitly instructed the user agent to override
the document’s character encoding with a specific encoding,optionally
return that encoding with the confidence certain and abort these
steps.If the transport layer specifies an encoding,and it is supported,
return that encoding with the confidence certain,and abort these
steps.
除此之外,它可能变得复杂.例如,字节顺序标记可以优先于元标记.
更新:由于编写了这个答案,规范发生了变化(大约在2012年中期),因此字节顺序标记现在优先于HTTP标头.