JAVA/SERVLET 以UTF-8导出CSV文件时产生乱码的解决方法
2016-07-28 12:05
736 查看
JAVA/SERVLET 以UTF-8导出CSV文件时产生乱码的解决方法
博客分类: JSP & Servletjavaservletcsvexcel乱码
Java代码
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标识。具体方法如下:
Java代码
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();
重点就是上面的红色代码(哎,ITEYE的这个编辑器怎么了,设置了颜色显示不出来)了(即倒数第三行代码),至于为什么要添加这个,只要你自己谷歌过BOM的话,自然就明白了。
另外,如果你使用的是Response的OUT进行输出的话,可以这么搞:
Java代码
out = response.getOutputStream();
//加上UTF-8文件的标识字符
out.write(new byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF });
相关文章推荐
- Java中比较器小结
- 整合DataTables到JavaWeb(SSH)实例总结分析
- 影响Java线程数、Server连接数的几个系统参数
- java读取classpath下的properties文件
- (12)SSH整合中的web.xml文件
- java系统高并发解决方案(转载)
- java 冒泡排序
- java实现FTP下载文件
- Myeclipse快捷键
- java对象的强引用,软引用,弱引用和虚引用
- 使用 Spring 的 AOP 机制来输出 Log
- 70.打印所有Spring boot载入的bean【从零开始学Spring Boot】
- 线性表(java)
- java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
- JAVAWEB引语
- JAVA设计模式
- struts.xml配置文件元素的说明
- java(优化15) 报错"java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher"解决方案
- Java Web学习(24): JSTL学习(二)
- 【SpringMVC】使用Maven搭建web3.0,且jdk为1.8的项目