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?