Java以UTF-8生成CSV文件使用Excel打开中文乱码

Author Avatar
AF_ 09月 14,2019
  • 使用微信扫码分享

最近在使用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编码
    加入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文件中文乱码问题得以解决并了解了其中缘由。