最近在使用hutool 提供的Csv工具生成Csv文件时遇到了这个问题,由于使用MacOs的Number或者Wps打开是没有乱码问题的,所以初步怀疑是微软Excel编码设置的问题。
查阅了一些资料,发现是需要在文件头部加入Bom
writer.write(new String[]{new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF})});
即可解决Excel打开中文Csv文件乱码的问题
原因探索
-
使用sublime分别打开未加入和加入Bom后的文件,右下角编码分别显示如下:
-
那么为什么加入BOM的文件才能在Excel正常显示中文:
UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。
所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯。
BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byte order)。微软在 UTF-8 中使用 BOM 是因为这样可以把 UTF-8 和 ASCII 等编码明确区分开。 -
至此,Excel打开UTF-8编码的CSV文件中文乱码问题得以解决并了解了其中缘由。
评论区