utf-8 でエンコードされた文字列があり、この文字列を Java http サーブレット経由の 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)) のように文字エンコーディングをそのまま渡さないのはなぜですか?
ありがとう、ケモ。