HttpServletResponse 无法设置字符集
HttpServletResponse cannot set charset
我在为我在网络应用程序上创建的 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
和其他编码。可以肯定的是,我生成文件没有问题,但是之后我转到记事本++并更改编码以查看它是否有效,我总是得到相同的结果。
ANSI
一切看起来都不错,但是当我更改为 UTF-8 时,它显示的是:
什么时候应该显示 "Cürey"。
很明显,文件总是在 ANSI 上创建的。
然后才是我真正的问题,但基本上和以前一样。在我的质量系统(在 Linux 服务器上)它是相似的,代码不影响编码,但显然文件总是使用 UTF-8 编码创建的。我想这取决于操作系统。
所以我想我的错误在于定义内容类型。我是不是定义有误?
在此先感谢您的帮助。
所以在执行一些测试后我意识到问题是,对于这样的内容(String
生成为 ByteArrayOutputStream
)编码定义的时刻就是你做的这种转换。
所以只需在第一行代码的方法中添加编码作为参数即可。
result.toString().getBytes("UTF-8");
那你就不需要再定义字符集了
response.setContentType("text/csv")
我在为我在网络应用程序上创建的 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
和其他编码。可以肯定的是,我生成文件没有问题,但是之后我转到记事本++并更改编码以查看它是否有效,我总是得到相同的结果。
ANSI
一切看起来都不错,但是当我更改为 UTF-8 时,它显示的是:
什么时候应该显示 "Cürey"。
很明显,文件总是在 ANSI 上创建的。
然后才是我真正的问题,但基本上和以前一样。在我的质量系统(在 Linux 服务器上)它是相似的,代码不影响编码,但显然文件总是使用 UTF-8 编码创建的。我想这取决于操作系统。 所以我想我的错误在于定义内容类型。我是不是定义有误?
在此先感谢您的帮助。
所以在执行一些测试后我意识到问题是,对于这样的内容(String
生成为 ByteArrayOutputStream
)编码定义的时刻就是你做的这种转换。
所以只需在第一行代码的方法中添加编码作为参数即可。
result.toString().getBytes("UTF-8");
那你就不需要再定义字符集了
response.setContentType("text/csv")