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?
答案 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>