其实我正在尝试流式传输CSV文件。我将编码设置为windows-1252,但它似乎仍然以UTF-8文件的形式流式传输。
final String encoding = "windows-1252";
exportResolution = new StreamingResolution(builder.getContentType() + ";charset=" + encoding.toLowerCase()) {
@Override
public void stream(HttpServletResponse response) throws Exception {
// Set response headers
response.setHeader("Cache-control", "private, max-age=0");
response.setCharacterEncoding(encoding);
OutputStream os = response.getOutputStream();
writeExportStream(os,builder);
}
}.setFilename(filename);
writeExportStream只是将内容流式传输到输出流(使用分页和db调用,需要一些时间)
它在本地(jetty插件)+ dev(tomcat)无法使用firefox / chrome
我没有测试过,但是工作人员告诉我,当我们不流式传输内容时它会更好用,但是我们在从db中加载了我们想要的所有objets之后,我们一次编写了该文件。
有人知道发生了什么吗?感谢
我的标题:
HTTP/1.1 200 OK
Content-Language: fr-FR
Content-Type: text/csv;charset=windows-1252
Content-Disposition: attachment;filename="export_rshop_01-02-11.csv"
Cache-Control: private, max-age=0
Transfer-Encoding: chunked
Server: Jetty(6.1.14)
我希望文件能够在windows-1252中的excel中导入但是我不能,它只是在utf8中打开而我的标题是windows-1252
答案 0 :(得分:2)
问题在于writeExportStream(os,builder);
方法。我们无法看到它正在执行的编码操作,但我猜它正在编写UTF-8数据。
输出操作需要执行两个编码任务:
第1步正确完成。第2步可能是错误的来源。
如果使用provided writer,它将以适当的响应编码对字符数据进行编码。
如果通过原始字节流(getOutputStream())写入预编码数据,则需要确保此过程使用相同的编码。