0

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)) のように文字エンコーディングをそのまま渡さないのはなぜですか?

ありがとう、ケモ。

4

2 に答える 2

0

おそらく、出力ストリームに渡すファイルはエンコーディングとして UTF-8 を使用していません。そこはチェックしたほうがいいと思います。

于 2013-06-14T16:04:10.917 に答える