【问题标题】:Does HTML5 specify a default character encoding for HTML documents if no character encoding is supplied?如果未提供字符编码,HTML5 是否会为 HTML 文档指定默认字符编码?
【发布时间】:2012-09-06 12:42:24
【问题描述】:

通过 HTTP 检索的示例 HTML 文档缺少:

  • HTTP Content-Type 标头
  • HTML <meta charset="<character encoding>" />
  • HTML <meta http-equiv='Content-Type' content='Type=text/html; charset=<character encoding>'>

对于 HTML5,是否将默认值(例如 UTF-8)假定为字符编码?还是完全由读取 HTML 文档的应用程序来选择默认值?

【问题讨论】:

    标签: html character-encoding


    【解决方案1】:

    使用以下规则确定字符集:

    1. 用户覆盖。
    2. “内容类型”字段中的 HTTP“字符集”参数。
    3. HTML 文档本身中任何其他数据之前的字节顺序标记。
    4. 带有“charset”属性的 META 声明。
    5. “http-equiv”属性设置为“Content-Type”且值设置为“charset”的 META 声明。
    6. 未指定的启发式分析。

    ...然后...

    1. 根据 Unicode 技术标准 #22 中定义的字符集别名匹配规则规范化给定的字符编码字符串。
    2. 覆盖一些有问题的编码,即有意将某些编码视为不同的编码。最常见的覆盖是将 US-ASCII 和 ISO-8859-1 视为 Windows-1252,但此表中还列出了其他几种编码覆盖。如规范所述,“根据上表将某些编码视为其他编码的要求是故意违反 W3C 字符模型规范。”

    但最重要的是:

    您应该始终每个 HTML 文档上指定字符编码,否则会发生不好的事情。您可以使用硬方法(HTTP Content-Type 标头)、简单方法(<meta http-equiv> 声明)或新方法(<meta charset> 属性),但请务必这样做。网络谢谢你。

    来源:

    【讨论】:

    • 谢谢,我明白应该始终定义字符编码。我正在验证我无法控制的文档,如果没有指定,我需要知道是否应该恢复为默认编码。
    • 考虑使用与 W3 验证器相同的逻辑。它是开源的,因此您只需查看其代码即可了解其功能。
    • 这并没有真正回答为什么需要字符集以及默认设置是什么的问题。另外,这仍然是答案吗?从写到现在已经有 2 年了,从那时起浏览器已经升级了很多。 IE 没有,但旧版本已经消失。
    • 所以你说像meta charset 这样的东西现在是必需的,这意味着如果你不提供至少一个浏览器可以做任何他们想做的事情并且可能会使用一个可怕的遗留值而不是 UTF-8 ?
    猜你喜欢
    • 2019-02-20
    • 2015-12-05
    • 1970-01-01
    • 2019-04-03
    • 2018-10-04
    • 2011-07-08
    相关资源
    最近更新 更多