【问题标题】:Include Unicode Signature (BOM) in HTML files or not?在 HTML 文件中是否包含 Unicode 签名 (BOM)?
【发布时间】:2015-08-01 16:34:48
【问题描述】:

在 Dreamweaver 中,我有“包含 Unicode 签名 (BOM)”选项。

如果我选中此框并将文件保存为 HTML 文件,则在 Web 浏览器中查看时看起来不错。如果不是,它会给我一些奇怪的瑞典字母符号,比如 åäö。

如果我使用标题响应“Content-Type: text/html; charset=utf-8”为这个 HTML 文件提供奇怪的字母,它仍然会给我奇怪的符号。

Q1)这是否意味着它不是UTF-8编码的文件(没有BOM显示奇怪符号的文件)?

Q2) 是什么让文件采用 UTF-8 编码,仅仅是 Unicode 签名 (BOM) 吗?

Q3)我应该还是不应该在我的文件(HTML、Javascript、CSS、PHP)中添加包含 Unicode 签名 (BOM)?

我知道我可以在 HTML 代码中添加 <meta charset="UTF-8"> 或在我的 .htaccess 中键入 AddDefaultCharset UTF-8。我只是认为最佳解决方案是让标题响应说“它是一个 UTF-8 编码文件”,然后实际上也提供一个 UTF-8 编码文件。没有别的了。

Q4) 我认为 HTML 文件是纯文本文件。这些文件中还隐藏了哪些其他信息?如何阅读这些信息?

【问题讨论】:

标签: html utf-8 byte-order-mark


【解决方案1】:

对于 UTF-8,BOM完全可选The Unicode consortium points 表示它可以制造问题而没有提供真正的优势; the W3C says 它可以替代其他声明编码的形式,并且应该适用于所有现代浏览器。

BOM 仅用于阐明编码的字节顺序。由于 UTF-8 只有一种字节序,所以它是多余的。它仅对 UTF-16 和其他编码有用。无论 BOM 是否存在,UTF-8 编码文件都是 UTF-8 编码的。

HTML 文件不会“隐藏”任何其他信息,它们是纯文本。

我的建议是:

  • 编码为 UTF-8 没有 BOM
  • 添加HTTP Content-Type 标头来表示文件的编码
  • <meta>标签添加到HTML本身作为后备,如果文件在HTTP上下文之外被解释(意味着不存在HTTP标头,因为文件不是通过HTTP读取的)李>

这为您提供了最好的兼容性,并且出现问题的可能性最小。如果您的字符仍然看起来很有趣,那么您的文件实际上不是 UTF-8 编码或 HTTP 标头设置不正确。

【讨论】:

  • BOM 可以帮助服务器端软件,不过 - PHP/ASP.NET/... 案例。它必须弄清楚什么是正确的文件编码来解析你拥有的任何内联字符。理想情况下,您不会在纯源代码中出现任何此类歧义,但是...一旦我弄清楚 BOM 可以提供多少帮助,我就再也没有回头...
  • 这在很大程度上取决于服务器端软件。一般而言,PHP 并不关心 BOM 或编码,Python 有一个特殊的文件内注释......如果 BOM 对您有用,那就太好了。但在这个问题的给定上下文中,我没有看到任何内容。
  • 感谢您的回答。我的缓存设置欺骗了我,标题设置“text/html”仍然存在,而不是我认为的“text/html;charset=utf-8”。只是最后的澄清。如何确定文件是 UTF-8 编码的(无需检查来自服务器的 HTTP 标头响应或查找内联元标记)?
  • @user 如果没有任何随附的元数据,就不可能知道一段文本的编码方式。如果你只有一个纯文本文件,那么你能做的最好的就是guess。这几乎意味着:尝试以某种编码打开文件并查看所有字符是否有效。
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多