0

我正在使用openCSV生成CSV 文件,并使用OutputStreamWriter将该文件附加到http response

这里最大的问题是,例如'€'在下载的 CSV 文件中是'‚¬ '。显然编码是错误的,但我已将其设置为'UTF-8'。此外,我将 pom.xml 中的编码设置为“UTF-8”。

response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
response.setContentType(BulkListExportConstants.CSV_CONTENT_TYPE);
OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream(), "UTF-8");

List<String[]> result = iSmsExportService.csvExport(columnNames);
CSVWriter csvWriter = new CSVWriter(osw, BulkListSharedConstants.CSV_SEPARATOR);
csvWriter.writeAll(result);
csvWriter.flush();
csvWriter.close();
osw.flush();
osw.close();

有什么建议么?

4

1 回答 1

0

正如 McDowell 所说,您的编码已正确完成,但如果您想从任何 BOM 感知产品(例如 Excel)中读取此 csv,您需要将 BOM 插入文件/流的开头

所以你可以改变响应:

OutputStream os = response.getOutputStream();
os.write(239); //0xEF
os.write(187); //0xBB
os.write(191); //0xBF

// then write your data normally
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");

这会将 BOM 插入文件的开头。

于 2014-06-18T09:55:38.920 回答