什么是BOM
2024-10-20 05:25:17
什么是BOM
BOM(byte-order mark),即字节顺序标记,它是插入到以UTF-8、UTF16或UTF-32编码Unicode文件开头的特殊标记,用来识别Unicode文件的编码类型。对于UTF-8来说,BOM并不是必须的,因为BOM用来标记多字节编码文件的编码类型和字节顺序(big-endian或little- endian)。
BOMs 文件头:
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8,
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian
BOM的来历
为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(U+FEFF)字符开头。这作为一个“特征符”或“字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序。
不同的系统对BOM的支持
因为一些系统或程序不支持BOM,因此带有BOM的Unicode文件有时会带来一些问题。
1. JDK1.5以及之前的Reader都不能处理带有BOM的UTF-8编码的文件,解析这种格式的xml文件时,会抛出异常:Content is not allowed in prolog.
2. Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
不同的编辑工具对BOM的处理也各不相同。使用Windows自带的记事本将文件保存为UTF-8编码的时候,记事本会自动在文件开头插入BOM(虽然BOM对UTF-8来说并不是必须的),但是editplus就不会这样做。
因为一些系统或程序不支持BOM,因此带有BOM的Unicode文件有时会带来一些问题。
1. JDK1.5以及之前的Reader都不能处理带有BOM的UTF-8编码的文件,解析这种格式的xml文件时,会抛出异常:Content is not allowed in prolog.
2. Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
不同的编辑工具对BOM的处理也各不相同。使用Windows自带的记事本将文件保存为UTF-8编码的时候,记事本会自动在文件开头插入BOM(虽然BOM对UTF-8来说并不是必须的),但是editplus就不会这样做。
最新文章
- mysql安装流程
- BufferedReader类
- HDU 1710 二叉树三种遍历
- 不起眼却有大作用的 .NET功能集(转发)
- java Channel
- 免费web api接口大全
- 学习linux之用户-文件-权限操作
- unity 编辑器和插件生产(四.2)
- 通用Key-Value存储系统的存储管理策略解析
- 红黑树LLRB
- 货物搬运(move)
- 深入浅出Redis-Spring整合Redis
- 微信小程序开发----微信开发者工具使用
- EasyPR源码剖析(2):车牌定位
- Python云端系统开发入门 pycharm代码
- multimap多重映照容器
- 微信小程序之this.setData
- mysql判断两个时间段是否有交集
- 阿里云mysql数据库备份还原
- ios 判断app程序第一次启动方法