实际上,我正在尝试流式传输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 plugin) + dev (tomcat)中工作,也不能在firefox / chrome中工作
我没有测试过,但工作中的人告诉我,如果我们不流式传输内容,但在从db加载了所有我们想要的对象后,我们可以一次性写入文件,效果会更好。
有人知道发生了什么吗?谢谢
顺便说一句,我的标题:
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
发布于 2011-02-02 00:37:43
问题出在writeExportStream(os,builder);方法中。我们看不到它正在执行什么编码操作,但我猜它正在写入UTF-8数据。
输出操作需要执行两个编码任务:
第1步正在正确完成。步骤2可能是错误的根源。
如果您使用provided writer,它将以适当的响应编码对字符数据进行编码。
如果预编码数据是通过原始字节流(getOutputStream())写入的,则需要确保此过程使用相同的编码。
https://stackoverflow.com/questions/4865208
复制相似问题