Java HttpServletResponse无法设置字符集

Java HttpServletResponse无法设置字符集,java,character-encoding,export-to-csv,content-type,java-ee-6,Java,Character Encoding,Export To Csv,Content Type,Java Ee 6,我在为我在web应用程序上创建的CSV文件设置字符集时遇到问题(在Tomcat9服务器上的windows笔记本电脑上进行测试)。 我就是这么做的: byte[] data = result.toString().getBytes(); ByteArrayOutputStream outStream = new ByteArrayOutputStream(data.length); outStream.write(data, 0, data.length); response.setContent

我在为我在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时,它显示了以下内容:

什么时候应该显示“Cürey”

显然,文件总是在ANSI上创建的

然后是我真正的问题,但基本上和以前一样。在我的质量系统(Linux服务器上)上类似,代码不影响编码,但显然文件总是使用UTF-8编码创建的。我想这取决于操作系统。 所以我想我的错误在于定义内容类型。我在定义上有没有犯错误


提前感谢您的帮助。

因此,在执行一些测试之后,我意识到问题是,对于这样一个内容(
字符串
,它是由tearrayoutputstream生成的
),定义编码的时刻就是您进行此转换的时候

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

result.toString().getBytes(“UTF-8”)

这样就不需要在上再次定义字符集


response.setContentType(“text/csv”)

如何生成响应正文?--你有没有试过查看web浏览器开发者/网络工具中的标题和主体,看看你从服务器上实际得到了什么?我刚刚在chrome上调试了网络,得到了以下结果:缓存控制:必须重新验证,后检查=0,预检查=0内容处置:附件;filename=“AEP_report.csv”内容语言:en AU内容长度:762内容类型:text/csv;charset=ISO-8859-1日期:2020年3月6日星期五06:56:29 GMT过期时间:0 Pragma:publicSo显示代码后的一些代码将
charset
更改为
ISO-8859-1
,返回到我第一条评论中的第一个问题,您尚未回答:如何生成响应正文?请检查我的编辑,我添加了行,直到发送响应。