首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Stripes / Tomcat对流式CSV进行错误编码

使用Stripes / Tomcat对流式CSV进行错误编码
EN

Stack Overflow用户
提问于 2011-02-02 00:32:10
回答 1查看 2.4K关注 0票数 1

实际上,我正在尝试流式传输CSV文件。我将编码设置为windows-1252,但它似乎仍然是UTF-8文件。

代码语言:javascript
复制
   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加载了所有我们想要的对象后,我们可以一次性写入文件,效果会更好。

有人知道发生了什么吗?谢谢

顺便说一句,我的标题:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-02 00:37:43

问题出在writeExportStream(os,builder);方法中。我们看不到它正在执行什么编码操作,但我猜它正在写入UTF-8数据。

输出操作需要执行两个编码任务:

  1. 告诉客户端响应文本采用哪种编码(通过headers)
  2. Encode以匹配的编码(例如,通过写入器)写入客户端的数据)

第1步正在正确完成。步骤2可能是错误的根源。

如果您使用provided writer,它将以适当的响应编码对字符数据进行编码。

如果预编码数据是通过原始字节流(getOutputStream())写入的,则需要确保此过程使用相同的编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4865208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档