HttpServletResponse无法设置字符集

问题描述 投票:0回答:1

我在为自己的Web应用程序上创建的CSV文件设置字符集时遇到问题(在Tomcat9服务器上的Windows便携式计算机上进行测试)。这就是我的工作:

byte[] data = result.toString().getBytes();
ByteArrayOutputStream outStream = new ByteArrayOutputStream(data.length);
outStream.write(data, 0, data.length);
response.setContentType("text/csv;charset=UTF-8");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"AEP_report.csv\"");
response.setContentLength(outStream.size());
ServletOutputStream responseOutStream = response.getOutputStream();
outStream.writeTo(responseOutStream);
outStream.flush();
outStream.close();
responseOutStream.flush();
responseOutStream.close();

我已尝试将编码更改为windows-1252等。可以肯定的是,生成文件没有问题,但是后来我转到notepad ++并更改了编码以查看其是否工作,我总是得到相同的结果。对于ANSI,一切看起来都不错,但是当我更改为UTF-8时,它显示的是:

wrong encoding

何时显示“Cürey”。

因此,显然文件总是在ANSI上创建。

然后这是我真正的问题,但基本上和以前一样。在我的Quality系统(在Linux服务器上)上,它是相似的,代码不影响编码,但是显然,那里的文件总是使用UTF-8编码创建的。我想这取决于手术系统。所以我想我的错误在于定义内容类型。我在定义上犯了任何错误吗?

感谢您的帮助。

java character-encoding export-to-csv content-type java-ee-6
1个回答
0
投票

[因此,在执行了一些测试之后,我意识到问题是,对于这样的内容(作为String生成的ByteArrayOutputStream),定义编码的时刻是执行此转换的时间。

因此只需将编码作为参数添加到代码第一行的方法上。

result.toString().getBytes("UTF-8");

然后您无需再次定义字符集

response.setContentType("text/csv")

© www.soinside.com 2019 - 2024. All rights reserved.