作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!