Java解决Excel打开UTF-8编码的CSV文件中文乱码

 

问题描述:

最近在使用Springboot实现文件下载功能时,由于原始文件只能是utf-8编码,无法在前期进行转码,所以下载下来的文件都是utf-8的编码;文件又是CSV文件,下游使用习惯一般是直接用excel打开,但是一直会出现中文乱码的情况。


原因分析:

通过网上查询的结果是,Excel打开的CSV文件默认是ANSI编码,如果CSV文件的编码方式为UTF-8、Unicode等编码可能就会出现文件乱码的情况。


解决方案:

针对上述原因,解决方法有两种,一种是从文件源头解决,把文件转为GBK的即可,但这种方法不可用,所以采用了另外一种方法,那就是告诉excel:这是一个utf-8编码的文件,你用utf-8打开。

具体方法就是在文件头部添加BOM标记,具体代码为:

outputStream.write(new   byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });

BOM中文名是字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的Unicode字符的名称。常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。Windows就是使用BOM来标记文本文件的编码方式的。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。当文本程序读取到以EF BB BF开头的字节流时,就知道这是UTF-8编码了。同理,若没有BOM的场合,可能无法正确识别编码,工具会使用默认的编码,编码不匹配则会导致乱码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值