我正在关注 HTML5 文档:
<!DOCTYPE html>
<html>
<head> </head>
<body>
<p>Beträge: 20€</p>
</body>
</html>
上述鳕鱼的输出如下:
Beträge: 20€
我尝试了以下 HTML5 代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>Beträge: 20€</p>
</body>
</html>
上面的代码给了我期望的以下输出:
Beträge: 20€
据我所知, HTML5 的默认字符编码为 UTF-8 。默认情况下,这意味着不应在<meta>
标记内明确指定它。
因此,在我的第一个代码段中,我跳过了代码<meta charset="UTF-8">
,但是我得到了一些奇怪的意外结果。
然后,我尝试通过在<meta charset="UTF-8">
对标签之间添加代码<head>
来使其工作正常,并得到了预期的结果。
所以,我的问题是,因为 HTML5 中的默认字符编码已设置为 UTF-8 ,如果未明确指定,为什么它不起作用?
为什么需要在 HTML5 文档中指定字符编码“ UTF-8” ?
答案 0 :(得分:3)
除非另有说明,否则HTTP1.1 specifies浏览器应将所有文本视为ISO-8859-1:
没有显式字符集时 参数由发送者提供,“文本”的媒体子类型 类型定义为具有默认字符集值“ ISO-8859-1”
与此同时,HTML5指定了
如果传输层指定了一种编码并且受支持,请放心地将其返回,然后中止这些步骤。
因此,HTTP1.1默认为ISO-8859-1,并覆盖其他所有内容。
如果您进行编码
Beträge: 20€
使用UTF-8,然后将其解码为ISO-8859-1,您将得到准确的乱码输出:
Beträge: 20â¬
,如以下代码片段所示(Java,并不重要):
new String("Beträge: 20€".getBytes("utf-8"), "iso-8859-1")
// result: Beträge: 20â¬
实际上,浏览器确实会警告您。例如。 Firefox在控制台中显示以下警告:
未声明HTML文档的字符编码。如果文档包含来自US-ASCII范围之外的字符,则在某些浏览器配置中,文档将呈现乱码。页面的字符编码必须在文档或传输协议中声明。
要获得正确的输出,您必须通过UTF-8手动覆盖ISO-8859-1(对于Firefox,它位于View
-> Text Encoding
-> {{1}下}(而不是“ Unicode
”)。
因此,可以得出结论:我什至都没有看到“ HTML5的默认字符编码为UTF-8” 。它说的似乎全部是:
鼓励作者使用UTF-8。一致性检查人员可能会建议作者不要使用旧版编码。
答案 1 :(得分:0)
因为语句“ HTML5的默认字符编码为UTF-8”是错误。该声明由网站like this发布。但是正如Marcel Dopita在Don’t be fooled by w3schools, UTF-8 is not the default HTML5 charset上所写的那样,这是错误的,并且实际上W3C recommendation具有Windows-1252的“建议的默认编码”,适用于英语语言环境。
有时会指出“ HTTP / 1.1默认为ISO-8859-1”。在1999年标准(RFC 2616)中确实如此,但在2014年版本(RFC 7230-7329)中,默认字符集has been removed如此,因此默认行为仅由HTML5建议指定。同样,即使传输层确实指定了“ iso-8859-1”,它也不是HTML5中的supported encoding,并且encoding specification说应将其视为Windows-1252的标签。