servlet text / plain响应总是UTF-8

时间:2013-10-12 21:35:31

标签: java servlets character-encoding jboss6.x

Java:1.6
容器:Jboss 6(Servlet 3.0 Api)

问题:

每个基于文本的响应都是使用UTF-8编码的,而不是我想要使用的Charset。我现在知道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,每个字符由一个字节表示,因此HTTP响应应该具有如下标题:

内容长度:16
Content-Type :text / plain; charset = ISO-8859-2

但作为回应我看到了:

内容长度:19
Content-Type :text / plain; charset = ISO-8859-2

我意识到非常快,国家字符使用两个字节编码,因此Content-Lenngth是19,而不是16.我检查了邮件正文,这是真的。正文中的文本使用UTF-8编码。

问题:

为什么使用UTF-8编码响应,而不使用明确的ISO-8859-2?

1 个答案:

答案 0 :(得分:0)

尝试使用:

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

设置你的html,通过设置

将字符渲染为ISO-8859-2
<head>
<meta charset="ISO-8859-2">
</head>