gpt4 book ai didi

java - HttpServletResponse 无法设置字符集

转载 作者:行者123 更新时间:2023-12-01 18:06:18 25 4
gpt4 key购买 nike

我在为我在 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 上创建的。

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

预先感谢您的帮助。

最佳答案

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

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

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

那么你不需要再次定义字符集

response.setContentType("text/csv")

关于java - HttpServletResponse 无法设置字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com