是否在 HTML 个文件中包含 Unicode 签名 (BOM)?

Include Unicode Signature (BOM) in HTML files or not?

在 Dreamweaver 中我有选项 "Include Unicode Signature (BOM)"。

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

如果我使用 header 响应 "Content-Type: text/html; charset=utf-8" 为这个带有奇怪字母的 HTML 文件提供服务,它仍然给我奇怪的符号。

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

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

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

我知道我可以在 HTML 代码中添加 <meta charset="UTF-8"> 或在我的 .htaccess 中键入 AddDefaultCharset UTF-8。我只是认为最佳解决方案是让 header 响应说 "it's a UTF-8 encoded file" 然后实际上还提供 UTF-8 编码文件。没有别的。

Q4) 我认为 HTML 文件是普通的 text-files。这些文件中还隐藏了哪些其他信息?我该如何阅读这些信息?

对于 UTF-8,BOM 完全可选The Unicode consortium points out that it can create problems while offering no real advantage; the W3C says 它可以替代其他形式的编码声明并且 应该适用于所有 modern 浏览器。

BOM 只是为了阐明编码的字节顺序。由于 UTF-8 只有一种字节序,因此它是多余的。它仅对 UTF-16 和其他编码有用。 UTF-8 编码的文件是 UTF-8 编码的,不管 BOM 是否存在。

HTML 文件没有 "hide" 任何其他信息,它们是纯文本。

我的建议是:

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

这为您提供了最佳的兼容性和最少的潜在问题。如果您的角色仍然看起来很有趣,那么您的文件实际上不是 UTF-8 编码的,或者 HTTP header 设置不正确。