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

标签 html utf-8 byte-order-mark

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

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

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

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

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

问题 3) 我是否应该在我的文件(HTML、Javascript、CSS、PHP)中添加包含 Unicode 签名 (BOM)?

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

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

最佳答案

对于 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 header 表示文件的编码
  • 添加<meta>如果文件在 HTTP 上下文之外被解释(意味着不存在 HTTP header ,因为文件不是通过 HTTP 读取的)

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

关于html - 是否在 HTML 文件中包含 Unicode 签名 (BOM)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30349506/

相关文章:

javascript - Bootstrap 响应在包含 Viewport meta 后不起作用

mysql - LIKE 运算符 MySQL 不起作用

python - 数据库不可知的方式说我想要一个列在 SqlAlchemy 中是 UTF-8?

php - UTF-8贯穿始终

linux - vi中的BOM字符及更多命令

javascript - 具有不同字段名称的焦点的 Bootstrap 工具提示

javascript - 图像交替功能交替错误的图像

html - Bootstrap 按钮网格大小

PHP文件下载后无法读取

notepad++ - 删除文件中的BOM字符