覆盖元字符编码声明

时间:2014-05-01 19:13:12

标签: html encoding character-encoding meta-tags meta

我知道使用较旧的样式声明页面的charset,如下所示:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

将使用较新的样式覆盖页面charset的任何声明,如下所示:

<meta charset="utf-8" />

但是我想知道两种旧式声明会做什么?第一个是第二个吗?第二个是第二个吗?或者它们都被省略,只是从确定页面实际编码的算法的其余部分中排除。


示例

作为一个例子,我想知道下面代码片段中的哪个字符编码声明将被接受并计入确定页面字符编码的算法中:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    ...
</head>


我无法在规格或任何其他声誉良好的文档来源中找到答案(尽管我可能错过了它)。


侧面注意

我不是在问这个问题,因为正确设置页面的字符编码有困难,而是因为我对答案以及浏览器是否更喜欢第一个或第二个声明感到好奇。因此,替代解决方案/解决方案将不是这个问题的可行答案。

感谢您的帮助!快乐的编码! :)

1 个答案:

答案 0 :(得分:1)

如果浏览器使用meta标记来确定字符编码,则第一个此类标记生效。这在当前的HTML规范中尚未指定,但它是常见的做法,并在HTML5中标准化,请参阅HTML5 CR,第8.2.2.2节Determining the character encoding

问题中提到的两种meta标签之间没有区别。它们只是语法变体。重要的是外观顺序:第一个使用。 (测试它相对简单,但您需要使用没有指定编码的HTTP标头且不包含字节顺序标记的页面,因为此类信息将覆盖任何 {{1}标签。)