0

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

问题:

每个基于文本的响应都使用 UTF-8 编码,而不是我想使用的 Charset。我现在知道 UTF-8 规则,但事实并非如此。我想使用不同的字符集,但我不能。

让我们看一下这个简单的代码:

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
内容类型:文本/纯文本;字符集=ISO-8859-2

但作为回应,我看到:

内容长度:19
内容类型:文本/纯文本;charset=ISO-8859-2

我很快意识到,国家字符是用两个字节编码的,所以 Content-Lenngth 是 19,而不是 16。我检查了消息正文,这是真的。正文中的文本使用 UTF-8 编码。

问题:

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

4

1 回答 1

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>
于 2013-10-12T21:41:28.647 回答