BOM也是Unicode标准的一部分,有它特定的适用范围。
通常BOM是用来标示Unicode纯文本字节流的,用来提供一种方便的方法让文本处理程序识别读入的文本文件是哪个Unicode编码(UTF-8,UTF-16BE,UTF-16LE)
![](https://images0.cnblogs.com/blog2015/765023/201507/031109418439196.jpg)
Windows相对其他系统,对BOM处理比较好,是因为Windows把Unicode识别代码集成进了API里,主要是CreateFile()。打开文本文件时它会自动识别并剔除BOM。
Windows用这个有历史原因,因为它最初脱胎于多代码页的环境(ANSI环境)。
而引入Unicode时Windows的设计者又希望能在用户不注意的情况下同时兼容Unicode和非Unicode(Multiple byte)文本文件,就只能借助这种小trick了。
似乎也真就Windows坚持用BOM了。。。。
在网页上使用BOM是个错误。BOM设计出来不是用来支持HTML和XML的。要识别文本编码,HTML有charset属性,XML有encoding属性
UTF-8 的网页代码不应使用 BOM,否则常常会出错。
Vim
设置带BOM :set bomb
设置不带BOM :set nobomb