0

Java: 1.6
コンテナー: Jboss 6 (サーブレット 3.0 API)

問題:

すべてのテキスト ベースの応答は、使用したい Charset ではなく、UTF-8 を使用してエンコードされます。今のところ UTF-8 のルールは知っていますが、そうではありません。別の Charset を使用したいのですが、できません。

この単純なコードを見てみましょう。

public void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException{

    response.setContentType(MediaType.TEXT_PLAIN);
    response.setCharacterEncoding("ISO-8859-2");

    ServletOutputStream outputStream = response.getOutputStream();
    byte [] bytes = "Królewna Śnieżka".getBytes(Charset.forName("ISO-8859-2"));
    System.out.println("bytes.length: " + bytes.length);

    outputStream.write(bytes);
}

ご覧のとおり、国別文字 (ó、Ś、ż) を含むテキストを送信したいと考えています。ISO 8859-2 では、すべての文字が 1 バイトで表されるため、HTTP 応答には次のようなヘッダーが必要です。

Content-Length : 16
Content-Type : text/plain;charset=ISO-8859-2

しかし、それに応じて次のように表示されます。

Content-Length : 19
Content-Type : text/plain;charset=ISO-8859-2

国別文字は 2 バイトを使用してエンコードされているため、Content-Length は 16 ではなく 19 であることにすぐに気付きました。メッセージ本文を確認したところ、これは本当です。本文のテキストは UTF-8 でエンコードされています。

質問:

ISO-8859-2を明示的に使用するのではなく、UTF-8を使用して応答がエンコードされるのはなぜですか?

4

1 に答える 1

0

使用してみてください:

byte [] bytes = new String("Królewna Śnieżka".getBytes(),Charset.forName("ISO-8859-2")).getBytes(Charset.forName("ISO-8859-2"));

を設定して、文字を ISO-8859-2 としてレンダリングするように html をセットアップします。

<head>
<meta charset="ISO-8859-2">
</head>
于 2013-10-12T21:41:28.647 に答える