我读到 HTML 文件必须包含-element<meta charset="utf-8">
中的head
元素才能符合标准。
为什么在文件本身中指定文件的编码是有意义的?为了阅读 -meta
元素,必须已经知道编码;因此再次指定编码似乎是多余/无用的。
我读到 HTML 文件必须包含-element<meta charset="utf-8">
中的head
元素才能符合标准。
为什么在文件本身中指定文件的编码是有意义的?为了阅读 -meta
元素,必须已经知道编码;因此再次指定编码似乎是多余/无用的。
在读取此元素之前,将使用用户代理的默认编码解释文档。(这通常是 ISO-8859-1。)如果编码与默认值不同,则根据元元素重新解释文档。这就是为什么您应该尽早将它放在正文中,或者最好使用 HTTP 标头(见下文)。
该<meta>
元素的希望是前面的字符都在 ASCII 字符集中,几乎在所有字符集中都能正确解释。
但是,一般来说,如果可能的话,应该在 HTTP 响应标头中发送此信息:
Content-Type: text/html; charset=utf-8
这可确保从一开始就正确解释文档。
确实,文档在其内部声明其编码是自相矛盾的。它真的只是一个次要的后备。如果设置, HTTPContent-Type
标头总是优先;并且应该始终设置。
如果文档曾经在非 HTTP 上下文中处理,则在 HTML 元元素中声明字符集是有意义的;这意味着如果它从未通过 HTTP 提供服务,因此无法在 HTTP 标头中声明其编码。如果下载并保存文档以供以后脱机使用,则可能会出现这种情况。在这种情况下,大多数编码都是 ASCII 兼容的,浏览器通常会尝试以 ASCII 兼容的默认编码(如 Latin-1 或 UTF-8)读取文档(取决于浏览器的设置),直到遇到元标记。如果您的文档以非 ASCII 兼容编码保存,例如 Shift-JIS 或 GB18030,这可能会或可能不会起作用,具体取决于默认设置以及浏览器如何智能地确定它正在处理的编码;它'
这样,您就可以设置有关页面编码的元数据信息。如果您没有设置此设置,则页面将使用浏览器中页面的默认编码设置加载。如果您的页面中有一些非 ASCII 字符(例如,如果未将 UTF-8 编码设置为页面编码,则显示有问号),这非常不方便。