0

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

谢谢,化疗。

4

2 回答 2

1

虽然不是您问题的答案,但您应该知道 anHttpServletResponse还有一种方法可以得到一个简单的、简单的 raw 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可能强加给您的所有转换。

于 2013-06-14T16:07:11.320 回答
0

您传递给输出流的文件可能没有使用 UTF-8 作为编码。我认为你应该检查一下。

于 2013-06-14T16:04:10.917 回答