BOM
BOM(字节顺序标记)是 Unicode 字符 U+FEFF,置于文本流开头用于指示编码形式与字节序。
用途
在 UTF-16/UTF-32 中指示大端或小端字节序,在 UTF-8 中作为编码签名(虽 UTF-8 字节序无关)。
机制
U+FEFF 经编码形式转为字节:UTF-8 为 EF BB BF,UTF-16LE 为 FF FE,UTF-16BE 为 FE FF。解码器读取前几字节匹配 BOM 确定编码。U+FEFF 本身是零宽不换行空格,故也可作签名。
用例
- 文本文件编码自动检测
- 跨平台文本交换
- CSV/TSF 文件编码标识
- 数据库导出文件编码
示例
- 输入
UTF-8 BOM输出EF BB BFThe first three bytes of a file
常见错误
- A UTF-8 BOM being rejected by a JSON parser (RFC 8259 forbids it)
- Do not use a BOM in JSON files
相关词条
UTF-8
UTF-8 是 Unicode 的变长编码形式,使用 1 至 4 字节表示一个码点,与 ASCII 完全向后兼容,是 Web 与现代系统的事实标准。 词汇表
UTF-16
UTF-16 是 Unicode 的变长编码形式,使用 2 或 4 字节表示一个码点,BMP 字符用 1 个 16 位码单元,补充平面字符用代理对(2 个码单元)。 词汇表
Endianness
字节序是多字节数值在内存中存储的字节排列顺序:大端(big-endian)高位在前,小端(little-endian)低位在前。 词汇表
Byte Order Mark
字节顺序标记(BOM)是置于 Unicode 文本开头的 U+FEFF 字符,用于指示编码形式与字节序。 词汇表
Unicode
Unicode 是国际字符编码标准,为世界上几乎所有书写系统的每个字符分配唯一码点(U+0000 至 U+10FFFF),共 1,114,112 个码点空间。 词汇表