Spring MVC Controller中解析GET方式的中文參數會亂碼的問題

Spring MVC Controller中解析GET方式的中文參數會亂碼的問題

###問題描述 在工做上使用Spring總是碰到一個問題,使用Controller處理GET方式的請求參數時,服務端獲得的結果會碰到亂碼,以前翻閱了不少與Java EE相關的不少亂碼處理資料,無論是加過濾器仍是統一文件編碼,都沒能正確解決,後來設計接口時,一直採用先Base64,而後再做爲參數傳過來的方式解決的。最近找到了根本的解決方案,順手記下來。html

###爲什麼會亂碼 Spring MVC 是基於Servlet,在Http請求到達Servlet解析以前,GET過來的URL已經被Tomcat先作了一次URLDecode。Tomcat對GET方式默認的URL解碼結果是iso-8859-1而不是我認爲的UTF-8(很奇怪爲啥會這麼幹,開源項目不都是喜歡默認UTF-8的麼)。web

###解決方案 解決方案也很簡單,除了日常在項目中web.xml裏配置的轉碼filter,jsp跟代碼文件統一編碼外,最關鍵的一點就是在Tomcat的conf目錄下的server.xml中配置 Connector的URIEconding="UTF-8"屬性便可。 官方文檔中對這個屬性的說明:apache

URIEncoding :This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.tomcat

這裏參考文檔是Tomcat5.5的,親測對Tomcat7也管用。jsp

###參考編碼

  1. Tomcat官網文檔:http://tomcat.apache.org/tomcat-5.5-doc/config/http.html
  2. CSDN上的一篇博文:http://blog.csdn.net/chenyongsuda/article/details/5393458
相關文章
相關標籤/搜索