HTTPServletResponse混淆了UTf-8

时间:2013-06-14 16:02:05

标签: java servlets utf-8

我有一个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))那样不传递字符编码?

谢谢, 化学

2 个答案:

答案 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作为编码。我想你应该检查一下。