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



我正在解析很多网站。所有工作正常,我也阅读字符集声明转换编码。现在我有一个问题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报头中指定的字符集解码文档。如果这显然失败了,因为某些字节在给定的编码中是无效的,则在元标记中指定的字符集(如果有的话)中再次尝试。如果仍然失败,所有的赌注都作废了。

如果两者都失败,但编码冲突,要么涉及人工或尝试对解码文本进行一些统计分析,这可能会告诉您哪个更可能是正确的。

相关内容

  • 没有找到相关文章

最新更新