2011-06-28 55 views
0

我試圖從JSP中使用getParameter獲取值,其中包括ü,é,à等。但是在servlet中獲取錯誤的值。我檢查的內容類型與螢火蟲,發現req.getParameter返回錯誤的字符編碼

Content-Type text/html;charset=UTF-8 

檢查與螢火蟲支柱部,找到了正確的價值在那裏,當我試圖訪問它的servlet是錯誤的。給ö而不是ö

req.getCharacterEncoding(); 

返回null。

試圖與在Servlet的開始設置

req.setCharacterEncoding("UTF-8"); 

,但沒有幫助。

編輯:

req.getParameter("myValue").getBytes("8859_1"), "utf-8") 

上面一行給出正確的值。

+0

可以擴大'在Servlet的開始,但沒有help.' –

+0

添加該行servlet代碼。 – coder247

回答

1

加入以下web.xml中固定的問題...

<filter> 
    <filter-name>charsetFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>charsetFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

這基本上只有'req.setCharacterEncoding(「UTF-8」);'。但是你自己說過它沒有用。也許你沒有運行你認爲正在運行的代碼,或者它實際上不在servlet的開頭。 – BalusC

+0

好的。這一變化解決了字符轉換的問題。在爲每個getParameter手動完成之前。 – coder247

2

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

用於HTTP查詢字符串的字符集(這對'GET參數的技術術語)可以在第2和2.1「URI語法」規範。字符集被定義爲US-ASCII。任何不映射到US-ASCII的字符都必須以某種方式進行編碼。 URI語法規範的第2.1節指出,US-ASCII之外的字符必須使用%轉義序列進行編碼:每個字符都被編碼爲文字%,然後是兩個表示其字符代碼的十六進制代碼。因此,(US-ASCII字符代碼97 = 0x61)等同於%61。在任何地方都沒有指定URI的默認編碼,這就是解碼這些值時存在很多混淆的原因。

頁確實提到2級可能的方式在一個Tomcat的servlet運行運行時影響這種行爲:

  • 坐落在server.xml中元素的屬性的URIEncoding在確定的(如的URIEncoding =「UTF-東西8" )。
  • 將server.xml中元素的useBodyEncodingForURI屬性設置爲true。這將導致連接器爲GET參數使用請求主體的編碼。