通过servlet导出为CSV文件时,中文字符串显示为问号

时间:2013-07-09 09:02:24

标签: java excel servlets csv internationalization

我现在正在调试一个Java servlet,它将几个字符串导出到CSV文件中。

它应该是非常标准的,除了对于简体中文字符串,它将在生成的CSV文件中显示为问号。

我已经搜索了许多解决方案,这是我认为最合理的解决方案,我已将其放入我的代码中:

    response.setContentType("text/csv;charset=gb18030");
    response.setCharacterEncoding("gb18030");
    response.setHeader("Content-Disposition", "attachment;filename=Contacts.csv");

    response.getWriter().write(returnString);
    response.getWriter().flush();
    response.getWriter().close();

但是,它对我的​​情况不起作用。我用“UTF-8”取代了“gb18030”,但仍然没有运气。

输入数据的方式如下:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
CsvExporter.writeCsvFile(dataRecordList, f_csvExportMappings, baos);
String returnString = new String(baos.toByteArray());

专家能否就类似问题提出一些建议?提前谢谢。

2 个答案:

答案 0 :(得分:0)

检查输入流中使用的字符集。 通常,我们使用“GBK”或“GB2312”进行中文字符集编码。

答案 1 :(得分:-1)

尝试将returnString读作UTF-8:

String returnString = baos.toString("UTF-8");//or whatever charset you need

然后,不要写字节数组,而是尝试直接写字符串:

response.setCharacterEncoding("UTF-8");//or whatever charset you need
PrintWriter writer = response.getWriter();  
writer.println(returnString);