csdn/CSDN博文备份/UTF-8的BOM含义作用与注意事项-147598554.md
2025-04-29 00:52:13 +08:00

3.8 KiB
Raw Permalink Blame History

UTF-8的BOM是什么有何作用。




image



BOM: Byte Order Mark


UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。


一般采用UTF-8无BOM格式即可。


BOMbyte-order mark即字节顺序标记它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记用来识别Unicode文件的编码类型。对于UTF-8来说BOM并不是必须的因为BOM用来标记多字节编码文件的编码类型和字节顺序big-endian或little-endian


在绝大多数编辑器中都看不到BOM字符因为它们能理解Unicode去掉了读取器看不到的题头信息。若要查看某个Unicode文件是否以BOM开头可以使用十六进制编辑器。下表列出了不同编码所对应的BOM。



BOM Encoding
EF BB BF UTF-8
FE FF UTF-16 (big-endian)
FF FE UTF-16 (little-endian)
00 00 FE FF UTF-32 (big-endian)
FF FE 00 00 UTF-32 (little-endian)

为了识别 Unicode 文件Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACEU+FEFF字符开头。这作为一个“特征符”或“字节顺序标记byte-order markBOM”来识别文件中使用的编码和字节顺序。




image



Linux/UNIX 并没有使用 BOM因为它会破坏现有的 ASCII 文件的语法约定。



UTF-8的BOM(Byte Order Mark)是一个特殊的字符标记,它由三个字节组成:EF BB BF(十六进制表示)。


主要作用


  1. 文件编码标识BOM可以明确标识文件是以UTF-8编码保存的帮助软件正确识别编码方式。
  2. 兼容性某些Windows程序如记事本使用BOM来区分UTF-8和其他编码。

注意事项


  • UTF-8实际上不需要BOM因为它没有字节序问题与UTF-16和UTF-32不同
  • 在某些情况下BOM可能导致问题
    • 网页开发中可能导致HTTP头部被破坏
    • 在Unix/Linux系统中的脚本文件中可能导致"#!"行无法被正确识别
    • 某些老旧系统可能无法正确处理带BOM的文件

实践建议


  • 如果文件只在Windows环境使用可以保留BOM
  • 如果文件需要跨平台使用或在网络环境中使用通常建议不使用BOM

大多数现代文本编辑器允许您选择是否添加BOM标记当保存UTF-8文件时。



Excel


当使用Excel 打开无 BOM 文件的时候,可能会出现字符乱码。



UTF-8的BOM含义、作用与注意事项 - 技术宅 - iSharkFly