带BOM的utf8和无BOM有什么区别

BOM是什么

BOM(Byte Order Mark) 参考 维基百科Byte_order_mark

是否需要BOM

「UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。

在UTF-8中,虽然在 Unicode 标准上允许字节顺序标记的存在,但实际上并不一定需要。UTF-8编码过的字节顺序标记则被用来标示它是UTF-8的文件。它只用来标示一个UTF-8的文件,而不用来说明字节顺序。[1]许多视窗程序(包含记事本)会需要添加字节顺序标记到UTF-8文件,否则将无法正确解析编码,而出现乱码。然而,在类Unix系统(大量使用文本文件,用于文件格式,用于进程间通信)中,这种做法则不被建议采用。因为它会妨碍到如解译器脚本开头的Shebang等的一些重要的码的正确处理。

添加BOM是微软自己的约定行为。而在编程环境中Linux环境下文件约定无BOM。

可以理解为无BOM才是标准的情况。

参考

Mark24

Everything can Mix.