微软的自带记事本程序notepad.exe会给UTF-8编码的文件头加入三个隐藏的字节(即BOM)。这是一种很愚蠢的做法。就是为了让编辑器不去猜测文件本身是ASCII码还是UTF-8。

什么是BOM

BOM(byte-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)

BOM的来历

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

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

不同的编辑工具对BOM的处理也各不相同。使用Windows自带的记事本将文件保存为UTF-8编码的时候,记事本会自动在文件开头插入BOM(虽然BOM对UTF-8来说并不是必须的),但是editplus就不会这样做。

References:

http://blog.csdn.net/zcmssd/article/details/6086711

http://club.topsage.com/thread-2227977-1-1.html

http://en.wikipedia.org/wiki/Byte-order_mark

转载于:https://www.cnblogs.com/foohack/p/3627553.html

文本编辑BOM标记(Byte Order Mark)相关推荐

  1. 什么是BOM(Byte Order Mark)?

    BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码,但它对于文件的读者来说是不可见字符. 下表列出不同的字符编码的BO ...

  2. php 签名 bom,PHP与Unicode签名(BOM,Byte Order Mark)

    在编写或者修改用UTF-8编码保存的PHP文件时,有时会莫名其妙出现一些问题: 1. 页面显示一个"锘"字,其他一片空白: 2. 不能登入或者不能登出: 3. 页顶出现一条空白: ...

  3. Keil错误fatal error: UTF-16 (LE) byte order mark detected

    错误提示:fatal error: UTF-16 (LE) byte order mark detected '..\blinky.c' but encoding is not supported 原 ...

  4. 理解字节序 [Understanding Big and Little Endian Byte Order]

    原文地址 (本文对于字节序讲解的很清楚,容易理解.) Problems with byte order are frustrating, and I want to spare you the gri ...

  5. 一文带你秒懂 字节序(byte order),比特序(bit order),位域(bit field)

    字节序,比特序,位域 前言 引出疑惑 字节序 比特序 网卡-比特的发送和接收顺序 大端序发送给小端序 小端序发送给大端序 位域 定义协议的万能公式 前言   不总结出来睡不着觉啊md,本来想着1点就能 ...

  6. Python: Numpy Byte Order

    1. get native endianess python - How to get endianness of numpy dtype - Stack Overflow 2. numpy dtyp ...

  7. Android中输出版权标记符号Copyright mark

    背景 版权标记图片 实现 效果图 背景 就是为了装逼,给自己开发的应用加上版权标记,例如微博的起始页面如下所示: 那我们一起来装个逼吧! 版权标记图片 没错,这就是一个圈圈里面加了一个c. 实现 在s ...

  8. 去除utf8文件的bom标记

    http://stackoverflow.com/questions/1068650/using-awk-to-remove-the-byte-order-mark http://thegreyblo ...

  9. JavaSE--jdom解析之bom

    参考:http://www.cnblogs.com/findumars/p/3620078.html 1 org.jdom2.input.JDOMParseException: Error on li ...

最新文章

  1. 华为AR28-31配置光纤接入
  2. Windows驱动中的Crash回调
  3. asp.net DBHelper类
  4. [蓝桥杯][2013年第四届真题]买不到的数目(动态规划)
  5. android层级关系图,画出 View 的层级 3D 图和树形图来分析层级关系
  6. 在线涂鸦画板小程序源码
  7. mysql索引的增删_mysql索引的增删改查怎么实现?
  8. 26个要素,仅仅依靠百度打造成功网站
  9. android 手机 跑分榜,安兔兔跑分最新排行图 2020年4月Android手机性能榜
  10. 20160809下午14:00公司断网处理过程(网络架构VSS模式)
  11. sqlserver中某列转成以逗号连接的字符串及逆转、数据行转列列转行
  12. 麒麟810怎么样_麒麟810+6G+128G+大电池,千元价格的手机上手体验
  13. oh my Zsh使用手册
  14. Linux系统如何添加IP别名
  15. 字节跳动常见算法面试题top50整理
  16. 搭建环境方便简单教程之php环境详细搭建
  17. jacob word另存为
  18. 一鲸落万物生,公链还需看Hoo Smart Chain,六十余家项目报名万物生长计划
  19. 云计算机中弹性,什么是弹性云计算?
  20. internet时间同步服务器地址(中国国家授时中心)

热门文章

  1. VMTK学习——01.入门
  2. Quartus 13.1安装心得
  3. 几个判断时不变系统的精彩例子
  4. 基于HTML5的RDP访问实战
  5. linux之reboot
  6. NHibernate使用时,不能返回自己的异常的解决办法
  7. Xilinx 在文档中所用的 LC(logic cells) 与 LUT之间的换算关系
  8. vivado----fpga硬件调试 (八)----例化ila核
  9. linux新增ssh端口80,Linux(CentOS 7) 新增或修改 SSH默认端口
  10. linux命令dd创建虚拟硬盘,每日一题.PYTHON如何模拟LINUX的dd命令快速创建大文件?...