我有一个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))那样不传递字符编码?
谢谢, 化学
答案 0 :(得分:1)
虽然不是您问题的答案,但您应该知道HttpServletResponse
还有一种方法可以获得简单,简单的原始OutputStream
。
如果您确定您的内容实际上是UTF-8,并且result
是一个字符串,请执行以下操作:
final OutputStream out = response.getOutputStream;
out.write(result.getBytes("UTF-8"));
out.flush(); // probably not needed but it never hurts
您将避免给定PrintWriter
可能强行给您的所有转换。
答案 1 :(得分:0)
您传递给输出流的文件可能不使用UTF-8作为编码。我想你应该检查一下。