参考1:UTF-8有BOM和无BOM的区别
参考2:一个特殊的空格ZERO WIDTH NO-BREAK SPACE
参考3:计算机字符编码的历史与发展
在UCS 编码中有一个叫做 ZERO WIDTH NO-BREAK SPACE
的字符
编码是 \uFEFF,在 Linux 的 Vim 中看到是一个空白字符,没有宽度,但确实存在,且无法删除
这个特殊字符称为BOM(Byte order mark),是Unicode的字节顺序标记,有2个作用:
- 说明字符流属于Unicode编码,且表明了编码方式
- 说明了字节序:big endian 和 little endian
具体如下
编码方式BOM(十六进制)UTF-8EF BB BFUTF-16(BE)FE FFUTF-16(LE)FF FEUTF-32(BE)00 00 FE FFUTF-32(LE)FF EE 00 00在电脑上新建一个记事本,用 Notepad++(版本7.8.8)打开,输入汉字“严格”,然后另存为,编码格式分别为 UTF-8有Bom的和UTF-8无Bom,可以发现,保存为 UTF-8无Bom的文件大小为 6字节
,而保存为UTF-8有Bom的为9字节
使用 Notepad++的插件 HEX-Editor 查看十六进制代码如下:
有Bom的
无 Bom 的
可以发现,有 Bom 的文件比 无Bom的文件多了
efbbbf
,即对应了UTF-8的Bom十六进制,转为二进制为 1110 1111 1011 1011 1011 1111,总计 24 位 (24bit),而 1Byte=8bit,所以就多了 3Byte 即 3 字节。
转自:一个特殊的空格ZERO WIDTH NO-BREAK SPACE - 知乎