Chrome如何确定正确的字符编码?

5
最近我一直在处理很多字符集,发现在尝试为随机网页建立正确的字符集时会出现很多问题。字符集可以在html文档的头部设置,或者在<head>部分内多次设置,有时声明也可能被省略。尽管存在这些问题,Chrome每次都能很好地设置最佳字符集。

我尝试搜索源代码,但由于不知道该去哪里查找,所以没有找到任何内容。

因此,我的问题是在哪里可以找到算法?

谢谢!

更新:

问题示例:

文档的HTTP标头(基于服务器配置):
Content-type: text/html; charset=utf-8
而文档看起来像:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-type" content="text/html;charset=ISO-8859-1" />
</head>
<body>...</body>
</html>

哪种编码将用于呈现文本?

您没有指定来源。似乎存在误解,因为字符编码无法在文档内更改。 - Jukka K. Korpela
我并不是说它会改变,但可以声明多次。 请查看更新 - Stefan Rogin
无论是UTF-8还是ISO-8859-1或CP1251或Venusian,这都是未定义的行为。通常,HTTP头部指定它是HTML文本,但你却发送了一个XML文档(第一个错误)。然后,你没有说明HTML的版本,所以应该是HTML4。在这种情况下,应该使用pragma(http-equiv),但它正在重新定义HTTP头部,因此在解析时不太可能产生影响。 - xryl669
很多时候答案是它不会。 - Casey
2个回答

4

Chrome使用https://github.com/google/compact_enc_det

如果您想阅读调用该项目的实际代码,则该函数为DetectTextEncoding,位于文件third_party/blink/renderer/platform/text/text_encoding_detector.cc中,具体代码请参见这里


-1

头信息的字符集会始终覆盖元信息中的字符集。


我已经阅读过,但我认为这并不简单,我已经了解到Chrome正在使用其语言设置来猜测字符集,我认为它有某种验证方式,例如,如果一个UTF8页面在元和HTML标题中都设置为ISO-8859-1,并且该页面在Chrome中正确呈现,则可能检测到BOM等。 - Stefan Rogin

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