java csv文件使用excel打开乱码

本文探讨了CSV文件导出后使用Excel打开出现乱码的问题,深入分析了字符编码对文件解析的影响,并提供了一种通过在文件头设置BOM来避免乱码的有效方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java csv文件导出后使用excel打开乱码

昨天遇到一个问题,csv文件导出后,提示“文件未完全加载”。点击继续打开后,发现有两种情况:

  1. 中文了乱码
  2. 列超出了excel所限制的范围
  3. 单元格中的字符超过了单元格所限制容纳最大字符数
    针对这三种原因开始排查:

一、中文乱码
生成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),**如图所示:

	BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
    **out.write('\ufeff');**
    out.write("需要写入文件的内容");**

如果使用ServletOutputStream:

	 response.setContentType("application/octet-stream;charset=UTF-8");
	 response.setContentLength(csv.length);
	 ServletOutputStream ros = response.getOutputStream();    
	 **ros.write(new byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });**
	 ros.write("其他导出内容");

这样从前端下载文件csv文件后,使用excel打开,就不会乱码了。

后续再更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值