【问题标题】:Why it's necessary to specify the character encoding in an HTML5 document if the default character encoding for HTML5 is UTF-8?如果 HTML5 的默认字符编码是 UTF-8,为什么需要在 HTML5 文档中指定字符编码?
【发布时间】:2019-02-20 09:55:48
【问题描述】:

我已关注 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。它是默认值,意味着不应在 &lt;meta&gt; 标记内显式指定它。

所以,在我的第一个代码 sn-p 中,我跳过了代码 &lt;meta charset="UTF-8"&gt; 但我得到了一些奇怪的意外结果。

然后,我尝试在&lt;head&gt; 标记对之间添加代码&lt;meta charset="UTF-8"&gt;,它工作得非常好,我得到了预期的结果。

所以,我的问题是,既然 HTML5 中的默认字符编码已设置为 UTF-8,为什么如果没有明确指定它就不起作用?

为什么需要在HTML5文档中指定字符编码"UTF-8"

【问题讨论】:

  • @ricky3350 :链接的问题不能令人满意地回答我的问题。根据您提供的链接的问题的答案,它说必须以某种或其他方式在 HTML5 网页中指定字符编码。那么,为什么他们说 UTF-8HTML5 中的默认字符编码。根据我的理解,默认的东西不需要明确指定,而是被认为是现成的。那么为什么 HTML5 文档中的字符编码不是这种情况呢?所以,请删除我的问题上的重复标记。谢谢

标签: html unicode encoding utf-8 character-encoding


【解决方案1】:

因为“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 年版本 (RFCs 7230-7329) 中默认字符集 has been removed,因此默认行为现在只是由 HTML5 建议指定。此外,即使传输层确实指定了“iso-8859-1”,它也不是 HTML5 中的supported encodingencoding specification 表示它应该被视为 Windows-1252 的标签。

【讨论】:

    【解决方案2】:

    除非另有说明,否则浏览器应将所有文本视为 ISO-8859-1 的 HTTP1.1 specifies

    当没有明确的字符集时 参数由发送者提供,媒体子类型为“text” 类型被定义为具有“ISO-8859-1”的默认字符集值

    同时,HTML5 规定

    如果传输层指定了一种编码,并且它受支持,则返回该编码并确定置信度,并中止这些步骤。

    因此,HTTP1.1 默认为 ISO-8859-1,并覆盖其他所有内容。

    如果你编码

    Beträge: 20€
    

    使用 UTF-8,然后将其解码为 ISO-8859-1,就会得到完全乱码的输出:

    Beträge: 20â¬
    

    如以下代码 sn-p 所示(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 -> Unicode(而不是 "@ 987654328@"))。


    因此,总结一下:我什至看不到它在哪里说 “HTML5 的默认字符编码是 UTF-8”。它所说的似乎是:

    鼓励作者使用 UTF-8。一致性检查器可能会建议作者不要使用遗留编码。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2012-12-26
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多