Please enable Javascript to view the contents

文件BOM头信息

 ·  ☕ 2 分钟

最近在做CSV文件导出的时候,在Windows下面使用Excel打开总是会出现乱码的情况,需要先将文件转存成GB2312格式才能正常打开,于是在网上找了一番,发现BOM头信息这个东西,加上以后,秒秒秒钟就正常了,所以抽时间整理了一下BOM头信息相关的资料。

1、BOM头信息是什么?

BOM的全称为Byte Order Mark,中文名译作”字节顺序标记“。

UTF-8编码文件中BOM在文件头部,占用三个字节,用来标识该文件属于UTF-8编码,现在已经有很多软件识别BOM头,但还是有些不能识别BOM头。Windows 就是使用 BOM 来标记文本文件的编码方式的。

2、常用的BOM头信息

编码 表示 (十六进制) 表示 (十进制)
UTF-8 EF BB BF 239 187 191
GB-18030 84 31 95 33 132 49 149 51

3、生成BOM信息

在文件开始的位置,直接将编码对应的BOM信息以二进制写入到文件中即可。以Java为例:

1
2
byte[] uft8bom = {(byte) 0XEF, (byte) 0XBB, (byte) 0XBF};
IOUtils.write(uft8bom, fileWriter);

4、扩展

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。

目录