JAVA以UTF-8导出CSV文件,用excel打开产生乱码的解决方法

原创 2016年07月26日 19:41:38

先上一段代码(上好的代码,多年陈酿)

OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
// 要输出的内容  
result = (String)contentMap.get(RESPONSE_RESULT);  
resp.setHeader("Content-Disposition", "attachment;filename=test.csv");  
osw.write(result);  
osw.flush();  
问题来了:

在SERVLET中,通过以上代码将内容输出至CSV文件中后,用EXCEL打开文件时,总是产生乱码,但是用NOTEPAD++打开时,显示正常。然后,在NOTEPADD++的“格式”工具栏中查了一下文件编码,发现是“以UTF-8无BOM格式编码”,然后试着将其改为“以UTF-8格式编码”后,再用EXCEL打开时,OK,一切显示正常。那么,这么说明EXCEL是支持UTF-8格式的CSV文件的。同时,也说明,通过以上方式导出的文件中是不含BOM信息的(关于BOM信息请自行谷歌一下)。那么,接下来,为了要让EXCEL正确的显示,要做的事就很明显了----手动的给将要输出的内容加上BOM标识。具体方法如下:

OutputStreamWriter osw = new OutputStreamWriter(resp.getOutputStream(), "UTF-8");  
// 要输出的内容  
result = (String)contentMap.get(RESPONSE_RESULT);  
resp.setHeader("Content-Disposition", "attachment;filename=test.csv");  
osw.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));  
osw.write(result);  
osw.flush(); 

重点就是上面的红色代码了(即倒数第三行代码),至于为什么要添加这个,只要你自己谷歌过BOM的话,自然就明白了。

另外,如果你使用的是Response的OUT进行输出的话,可以这么搞:

out = response.getOutputStream();     
//加上UTF-8文件的标识字符      
out.write(new   byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });


csv文件打开是乱码,怎么办?管用的方法,一个就够

工作中,将python生成的中间结果文件写入CSV,经常这么干是不是?文件保存下来后用excel打开,出现了乱码情况,真心烦。为什么?CSV是用UTF-8编码的,而EXCEL是ANSI编码,由于编码方...
  • fwj_ntu
  • fwj_ntu
  • 2017-11-17 17:56:41
  • 1740

csv用excel打开中文乱码

unity中保存成csv文件是非常好用的,只需要用逗号隔开就好,但是今天在保存成csv文件时由于文本存在中文字符所以出现了奇怪的问题。 1.首先是初次写入csv文件后,用excel打开文件中文字...
  • SunnyInCSDN
  • SunnyInCSDN
  • 2017-08-20 23:32:59
  • 3159

Mac下CSV中文乱码问题解决方法

来源 Mac下生成CSV文件,用Excel打开时经常会遇到中文乱码的问题。例如下图所示,有一个文件“users.csv”,里面的内容是中文,并且选中文件后点击空格预览,也能正常显示中文。  但用Ex...
  • wqdwin
  • wqdwin
  • 2017-07-25 10:47:06
  • 1693

避免UTF-8的csv文件打开中文出现乱码

最近又遇到了需要提供csv下载功能的需求,不同的时需要用java来实现,心想简单,就把以前php的版本重写了一遍,然后生成一份csv,用excel2007打开一看,里面的中文都是乱码,一下就懵了,以前...
  • zhaozhi406
  • zhaozhi406
  • 2015-05-29 22:22:50
  • 22579

导出csv文件中文乱码问题

编码相关基础: 参考http://blog.csdn.net/youyue/article/details/4580402 http://blog.163.com/asd_wll/blog/sta...
  • wangfei111g
  • wangfei111g
  • 2015-11-12 10:35:25
  • 7021

使用python处理中文csv文件,并让excel正确显示中文(避免乱码)

使用python2处理中文时,经常会出现乱码问题,之前使用python处理中文csv文件时,处理过程程序输出出现了乱码,最后在程序中能够正常显示出中文,但是导出文件时,使用excel打开出现了中文乱码...
  • Xw_Classmate
  • Xw_Classmate
  • 2016-07-18 11:43:04
  • 20987

解决Excel转CSV格式中文不能正常显示的问题

Excel转格式为CSV时,中文不能正常显示往往是由于编码格式(encoding)不兼容导致的。但我们可以通过以下方式完美解决该问题。只需4步,非常简单。 1、保存将要转化的Excel文件为Uni...
  • vernice
  • vernice
  • 2015-06-03 02:56:01
  • 18281

Excel打开csv文件中文乱码解决方法

csv文件用记事本打开没问题,用Excel打开中文就乱码 解决方法: 1、用记事本打开文档 2、另存为以ASCII编码的csv文件 3、打开新的csv文件,成功另外: 可以通过dos窗口输入...
  • soga_haha
  • soga_haha
  • 2017-12-10 20:24:39
  • 138

python csv 格式文件 中文乱码问题解决方法

我遇到的问题是使用pandas的DataFrame to_csv方法实现csv文件输出,但是遇到中文乱码问题,已验证的正确的方法是: df.to_csv("cnn_predict_result....
  • glory1234work2115
  • glory1234work2115
  • 2016-12-28 21:05:58
  • 14602

Txt转CSV,打开乱码

打开 UTF-8 编码的 CSV 文件的方法:1) 打开 Excel 2) 执行“数据”->“自文本”3) 选择 CSV 文件,出现文本导入向导4) 选择“分隔符号”,下一步5) 勾选“逗号”,去掉“...
  • Handsome_Sheng
  • Handsome_Sheng
  • 2017-04-12 23:07:28
  • 1752
收藏助手
不良信息举报
您举报文章:JAVA以UTF-8导出CSV文件,用excel打开产生乱码的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)