带或不带BOM的UTF-8?

时间:2015-01-03 17:16:08

标签: html css html5 css3 encoding

当你现在编写网页并使用UTF-8时,最好的是什么 练习 - 使用或不使用BOM将您的页面编码为UTF-8?

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

1 个答案:

答案 0 :(得分:1)

来自Unicode website

  

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

     

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

以及:

  

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

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

BOM只应在数据以多字节格式(UTF-16/32)传输而没有指定字节顺序的上下文中使用。你会使用这样的东西超出我的范围,但这是唯一需要BOM的情况。

在将生成和使用所述文本文件的代码中区分文件(HTML元标记等)或更好的文本编码。对于UTF-8文件的广泛分发,更常见的变体是没有BOM的变体。实际上,一些文本编辑器不期望BOM并且可能无法正确解析流。