java csv文件导出后使用excel打开乱码
昨天遇到一个问题,csv文件导出后,提示“文件未完全加载”。点击继续打开后,发现有两种情况:
- 中文了乱码
- 列超出了excel所限制的范围
- 单元格中的字符超过了单元格所限制容纳最大字符数
针对这三种原因开始排查:
一、中文乱码
生成csv文件后时,已经设置了字符编码为utf-8,怎么还是乱码呢?于是使用notepad++打开,发现中文正常显示并没有乱码,然后关掉notepad++,再换excel打开,呐呢?乱码?什么情况,然后上网查询,发现使用notepad++打开后,将字符编码设置为utf-8-bom,保存,关闭。再用excel打开,心里无比兴奋,竟然没有乱码。但是此方法治标不治本,我们不可能告诉客户,先用notepad++ 打开,转码然后在用excel打开,显然不现实。要根治就是要用生成csv的开始,从代码改起:
既然excel要使用utf-8-bom 编码打开中文才不会乱码,那我们正常使用就是UTF-8呀,于是找到了一种解决办法,**在csv的文件头设置BOM(byte order mark),**如图所示:
如果使用ServletOutputStream:
这样从前端下载文件csv文件后,使用excel打开,就不会乱码了。