[英]servlet text/plain response is always UTF-8
Java:1.6
容器:Jboss 6(Servlet 3.0 Api)
問題:
每個基於文本的響應都是使用UTF-8編碼的,而不是我想使用的字符集。 我現在知道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
內容類型 :文本/純文本;字符集= ISO-8859-2
我很快意識到,國家字符是使用兩個字節編碼的,因此Content-Lenngth是19,而不是16。我檢查了消息正文,這是事實。 正文中的文本使用UTF-8編碼。
題:
為什么響應使用UTF-8編碼而不是顯式使用ISO-8859-2?
嘗試使用:
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.