为什么我要使用Unicode签名字节顺序标记(BOM)?

这些已经过时了吗?它们似乎是有史以来最糟糕的想法 – 在文档内容中嵌入了一些无人能看到的内容,但会影响文档的功能.我不明白为什么我会想要一个.

在某些情况下,它们是必要的,是的,因为UTF-16有little-endian和big-endian实现.

读取未知的UTF-16文档时,如何判断使用哪两个?

唯一的解决方案是在文档中放置某种易于识别的标记,无论使用何种字节顺序,都不会将其误认为是其他任何标记.

这就是BOM的作用.

你需要一个吗?只有当你1)使用UTF编码时才会出现字节顺序问题(对于UTF-16很重要,但无论字节顺序如何,UTF8总是看起来都一样),并且该文档将与外部应用进程共享.

如果您自己的应用进程是唯一一个要读取和写入文档的应用进程,您可以省略BOM,并简单地一劳永逸地决定您要使用哪种字节序.但是如果另一个应用进程必须读取该文档,它将不会提前知道字节序,因此添加BOM可能是一个好主意.

翻译自:https://stackoverflow.com/questions/1045663/why-would-i-use-a-unicode-signature-byte-order-mark-bom