什么是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就不会这样做。


最新文章

  1. mysql安装流程
  2. BufferedReader类
  3. HDU 1710 二叉树三种遍历
  4. 不起眼却有大作用的 .NET功能集(转发)
  5. java Channel
  6. 免费web api接口大全
  7. 学习linux之用户-文件-权限操作
  8. unity 编辑器和插件生产(四.2)
  9. 通用Key-Value存储系统的存储管理策略解析
  10. 红黑树LLRB
  11. 货物搬运(move)
  12. 深入浅出Redis-Spring整合Redis
  13. 微信小程序开发----微信开发者工具使用
  14. EasyPR源码剖析(2):车牌定位
  15. Python云端系统开发入门 pycharm代码
  16. multimap多重映照容器
  17. 微信小程序之this.setData
  18. mysql判断两个时间段是否有交集
  19. 阿里云mysql数据库备份还原
  20. ios 判断app程序第一次启动方法

热门文章

  1. [转]SQL Server 创建数据库邮件
  2. iOS:文本视图控件UITextView的详细使用
  3. delphi Align属性
  4. raymarching
  5. Android-经常涉及到的权限
  6. 假设这篇文章也能訪问过万,我的那些朋友就是SB
  7. 经常使用meta标签属性
  8. Unity 4.x 各版本IOS IL2CPP对比
  9. Simple Factory (简单工厂模式)
  10. oracle update left join查询