2012-03-01 17 views
1

從我的JSP中,我發送了一個名爲jobDetails的參數的GET請求,其中包含一些中文字符[使用URLEncoder.encode()編碼)]。現在在我的servlet的doGET()中,我需要將數據寫入文件。當我做如何使用GET請求在tomcat中保留utf-8字符編碼

request.getParameter("jobDetails"); // this one retrieves wrong characters 

有這個設置的Tomcat URIEncoding="UTF-8"

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> 

標籤的解決方案,但我們的設計師是地獄彎曲上不改變現有的tomcat的設置。我嘗試着設置一個過濾器,用於在012F0DF()中爲請求設置characterEncoding(),如BalusC's blog中所述。但是這僅適用於POST請求。除了更改Tomcat設置之外,還有其他解決方案嗎?我正在使用Tomcat 6和jdk 1.6。

回答

-1

我發現了一種莫名其妙......我進口org.springframework.web.bind.ServletRequestUtils類從org.springframework.web-3.0.0.RELEASE.jar和用於從「請求」對象解析參數「jobDetails」以下內容:

String jobDetails = new String((ServletRequestUtils.getStringParameter(request, "jobDetails")).getBytes("ISO-8859-1"), "UTF-8"); 
4

對不起,您將不得不告訴您的架構師,有時,更改配置是唯一的選擇,這是其中的一種。要在Tomcat的URL參數中支持UTF-8字符,您需要將該設置添加到連接器。

0

如果與建築師爭吵聽起來不像是有趣(而且沒有),那麼URLEncodedUtils的解析應該做你需要的。

public static void main(String[] args) { 
    List<NameValuePair> foo = null; 
    List<String> encodings = Arrays.asList("ISO-8859-1", "UTF-8"); 

    for (String e : encodings) { 
     System.out.println(String.format("Interpreting as %s", e)); 
     foo = new ArrayList<NameValuePair>(); 
     URLEncodedUtils.parse(foo, new Scanner("jobdetails=%C2%A2"), e); 

     for (NameValuePair i : foo) { 
      System.out.println(String.format("%s had value %s", i.getName(), i.getValue())); 
     } 
    } 
} 

您仍然需要將原始請求字符串傳遞給此方法,但這應該不會太困難。由於它是URL編碼,因此您不必擔心編碼問題,因爲所有非ASCII字符都將被轉義。

相關問題