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 });
分享到:
相关推荐
在IT领域,数据导出是一项常见且重要的任务,尤其是在企业级应用中,用户往往需要将数据库中的数据以各种格式(如CSV、Excel等)导出,以便于数据分析、报告生成或进一步的数据处理。利用IE(Internet Explorer)...
标题中的“servlet导出文件”指的是在Java Web开发中,使用Servlet技术来实现文件的导出功能。Servlet是Java编程语言中用于扩展服务器功能的一种技术,尤其在处理HTTP请求和响应方面非常实用。在Web应用程序中,...
4. **解决方案**:解决DisplayTag中文乱码问题,通常需要修改`displaytag.properties`文件,将`pageEncoding`和`contentType`属性设置为`UTF-8`,并确保服务器和数据库连接也支持UTF-8编码。 5. **自定义....
针对上述原因,我们可以采取以下几种方法来解决汉字乱码问题: **1. 确保服务器端与客户端字符集一致** - **检查服务器端字符集**:可以通过执行SQL语句`SELECT * FROM V$NLS_PARAMETERS`来查看当前数据库的字符集...
DisplayTag是一个开源的Java Web开发库,用于生成复杂的表格,提供了很多高级功能,如排序、分页、国际化、导出等。它简化了在Web应用中处理表格展示的工作,极大地提高了开发效率。以下是对DisplayTag标签、源码、...