gpt4 book ai didi

java - HTTPServletResponse 弄乱了 UTf-8

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

我有一个 utf-8 编码的字符串,并希望通过 java http servlet 响应该字符串作为 http 请求的答案,但浏览器只收到困惑的特殊字符。

如果我通过 FileOutputStream 将相同的字符串打印到文件中,则字符会被正确处理。

因此,HttpServletResponse-Writer 将德语字符“ä”从正确的表示法 0xC3A4 更改为 0xC383C2A4。

在下面的代码中,“response”是 HttpServletResponse 对象,“result”是字符串。

try {       
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type", "text/xml; utf-8");
PrintWriter out = response.getWriter();
out.write(result);
out.close();

Writer fileOut = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("outputfile")));
fileOut.write(result);
fileOut.close();

} catch (IOException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}

为什么 HttpServletResponse 操作字符串而不是像 BufferedWriter(OutputStreamWriter(FileOutputStream)) 那样直接传递字符编码?

谢谢,化疗。

最佳答案

虽然这不是您问题的答案,但您应该知道 HttpServletResponse 也有一个方法来获取简单的、简单的、原始的 OutputStream。如果您确定您的内容实际上是 UTF-8 格式,并且您的 结果 是一个字符串,只需执行以下操作:

final OutputStream out = response.getOutputStream;
out.write(result.getBytes("UTF-8"));
out.flush(); // probably not needed but it never hurts

您将避免给定 PrintWriter 可能强制执行的所有转换。

关于java - HTTPServletResponse 弄乱了 UTf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17112694/

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