侧边栏壁纸
博主头像
故黎

Talk is cheap , show me the code.

  • 累计撰写 27 篇文章
  • 累计创建 4 个标签
  • 累计收到 7 条评论
标签搜索

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

故黎
2019-09-14 / 0 评论 / 0 点赞 / 786 阅读 / 509 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-12-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

0
广告 广告

评论区