UTF-8 带 BOM 还是不带 BOM?

pet*_*rov 2 html css encoding

现在,当您编写网页并使用 UTF-8 时,最佳
实践是什么 - 将页面编码为带或不带 BOM 的 UTF-8?


那么...对于任何类型的文件,而不仅仅是网页(即不仅仅是 HTML 文件),答案是什么?

ini*_*mfs 5

来自 Unicode网站

\n
\n

问:UTF-8 数据流可以包含 BOM 字符(UTF-8 形式)吗?如果是,那么我仍然可以假设剩余的 UTF-8 字节是大端顺序吗?

\n

答:是的,UTF-8 可以包含 BOM。但是,它对于字节流的字节顺序没有影响。UTF-8 始终具有相同的字节顺序。初始 BOM 仅用作签名 \xe2\x80\x94 ,指示未标记的文本文件采用 UTF-8 格式。请注意,某些 UTF-8 编码数据的接收者不需要 BOM。在 8 位环境中透明使用 UTF-8 的情况下,BOM 的使用将干扰任何在开头需要特定 ASCII 字符的协议或文件格式,例如使用“#!” 位于 Unix shell 脚本的开头。

\n
\n

也:

\n
\n

如果数据具有关联类型(例如数据库中的字段),则不需要 BOM。特别是,如果文本数据流被标记为 UTF-16BE、UTF-16LE、UTF-32BE 或 UTF-32LE,则 BOM 既不需要也不被允许。任何 U+FEFF 都将被解释为 ZWNBSP。

\n
\n

在 UTF-8 中不需要也不建议使用 BOM,因为它除了标记 UTF-8 流的开始之外没有任何用途。然而,这并不是区分 UTF-8 的有效方法,因为 BOM 可能会被简单地解析为其他编码格式的字符。

\n

BOM 仅应在数据以多字节格式 (UTF-16/32) 传输且不指定字节序的情况下使用。我无法理解在哪里会使用这样的东西,但这是唯一需要 BOM 的情况。

\n

区分文件内的文本编码(HTML 元标记等)或更好地在将生成和使用所述文本文件的代码中。对于广泛分发的 UTF-8 文件,更常见的变体是不带 BOM 的变体。事实上,某些文本编辑器不需要 BOM,因此可能无法正确解析流。

\n