簡體   English   中英

servlet文本/純文本響應始終為UTF-8

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM