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を使用して応答がエンコードされるのはなぜですか?