`
Rainbow702
  • 浏览: 1076882 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

JAVA/SERVLET 以UTF-8导出CSV文件时产生乱码的解决方法

阅读更多
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();

 重点就是上面的红色代码(哎,ITEYE的这个编辑器怎么了,设置了颜色显示不出来)了(即倒数第三行代码),至于为什么要添加这个,只要你自己谷歌过BOM的话,自然就明白了。

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

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

 

3
0
分享到:
评论
3 楼 Rainbow702 2015-08-17  
hwei199 写道
谢谢!正好用到,受益了,这个评论必须嘀!



有用就可以,哈哈
2 楼 hwei199 2015-08-14  
谢谢!正好用到,受益了,这个评论必须嘀!
1 楼 asialee 2013-03-22  
这个挺好,今天正好用到,受用了。

相关推荐

    java jsp解决utf-8乱码.zip

    通过以上方法,我们可以有效地解决Java JSP项目中的UTF-8乱码问题。在实际开发中,一定要养成良好的编码习惯,避免因为编码问题带来的不必要的麻烦。同时,定期复习和总结有关编码的知识点,对于提升开发效率和代码...

    解决Invalid byte 1 of 1-byte UTF-8 sequence

    8 sequence-中文版的window下java的默认的编码为GBK.url":这个文件名暗示了解决XML文件读取异常的方法,尤其是在Windows环境下,Java默认的文件编码可能是GBK,这可能导致读取包含UTF-8编码的XML文件时出现问题。...

    java导出csv文件并压缩(含下载提示功能)

    在Java编程环境中,导出CSV(逗号分隔值)文件并将其压缩成ZIP格式是一项常见的任务,特别是在处理大量数据时。CSV文件因其简洁、通用的格式,常用于数据交换和存储。本教程将深入讲解如何实现这个过程,并提供前...

    javax.servlet-api-4.0.1-API文档-中英对照版.zip

    赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...

    javax.servlet-api-3.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    java\Servlet技术--小例子.pdf

    <servlet-class>test1.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/test1/*</url-pattern> </servlet-mapping> </web-app> ``` - **...

    javax.servlet-api-3.1.0.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    javax.servlet-api-4.0.1.jar

    本篇文章将聚焦于`javax.servlet-api-4.0.1.jar`这个jar包,它是Servlet API 4.0.1版本的实现,主要用于支持JSP和Servlet的开发,特别是针对自定义标签的使用。本文将详细介绍Servlet API 4.0.1的关键特性以及如何在...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    当你遇到“找不到javax.servlet.*”这样的错误时,通常是因为你的项目缺少了这个库,所以需要引入`javax.servlet.jar`来解决问题。 1. **Java Servlet简介** Java Servlet是Java平台上的一个标准,用于扩展服务器...

    Java Web上传组件使用:Commons-fileupload

    在Java Web开发中,文件上传是一项常见的功能,用于接收用户从网页上传的文件。Apache Commons FileUpload库是一个非常实用的工具,它简化了这个过程。本文将深入探讨如何使用Commons FileUpload组件来处理文件上传...

    javax.servlet-api-4.0.0-API文档-中文版.zip

    赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...

    chexagon/redis-session-manager

    【标题】"chexagon/redis-session-manager" 是一个针对Java Web应用的session管理解决方案,它主要用于在基于JDK 8和Tomcat 8的环境中实现Redis作为session存储的工具。这个工具允许开发者将Web应用中的用户session...

    thrift 生成的java包servlet-api-2.5.jar

    thrift 生成的java包servlet-api-2.5.jar

    sentinel-web-servlet-1.8.0-API文档-中英对照版.zip

    赠送jar包:sentinel-web-servlet-1.8.0.jar; 赠送原API文档:sentinel-web-servlet-1.8.0-javadoc.jar; 赠送源代码:sentinel-web-servlet-1.8.0-sources.jar; 赠送Maven依赖信息文件:sentinel-web-servlet-...

    一个用servlet实现导出csv文件的实例

    在这个实例中,我们将探讨如何使用Servlet来生成CSV(Comma Separated Values)文件,这是一种常见的数据交换格式,广泛应用于数据导入和导出操作。CSV文件易于读取,支持多种应用程序,如电子表格软件。 首先,...

    [jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题

    标题中的“jspSmartUpload上传中文文件名乱码问题”是一个常见的技术挑战,特别是在处理Web应用程序时,特别是那些涉及用户上传文件的场景。JSP Smart Upload是早期流行的一个用于Java Web应用的文件上传组件,它...

    springboot乱码问题解决方案

    这将设置SpringBoot项目的字符编码为UTF-8,解决乱码问题。 2. Maven插件配置 在pom.xml文件中添加以下配置: <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</...

    解决java enctype multipart form-data文件上传传值问题

    ### 解决Java enctype "multipart/form-data" 文件上传传值问题 在Java Web开发中,处理文件上传是一项常见的任务。特别是当涉及到使用`multipart/form-data`作为表单的编码类型时,这种需求更为突出。本文将深入...

    javax.servlet.jar下载

    Files contained in javax.servlet.jar: META-INF/MANIFEST.MF ...META-INF/maven/org.mortbay.jetty/servlet-api-2.5/pom.xml META-INF/maven/org.mortbay.jetty/servlet-api-2.5/pom.properties

Global site tag (gtag.js) - Google Analytics