標籤:
Spring MVC Controller中解析GET方式的中文參數會亂碼的問題問題描述
在工作上使用突然出現從get擷取中文參數亂碼(新裝機器,tomcat重新下載和配置),查了半天終於找到解決辦法。
為何會亂碼
Spring MVC 是基於Servlet,在Http請求到達Servlet解析之前,GET過來的URL已經被Tomcat先做了一次URLDecode。Tomcat對GET方式預設的URL解碼結果是iso-8859-1而不是我認為的UTF-8。
解決方案
解決方案也很簡單,除了平常在項目中web.xml裡配置的轉碼filter,jsp跟代碼檔案統一編碼外,最關鍵的一點就是在Tomcat的conf目錄下的server.xml中配置 Connector的URIEconding=“UTF-8"屬性即可。
官方文檔中對這個屬性的說明:
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.
這裡參考文檔是Tomcat5.5的,親測對Tomcat7也管用。
NOTE:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true" />
通過 useBodyEncodingForURI="true" 這種配置, 然後在代碼中設定預設的 Request.setCharacterEncoding 編碼,就能有效解決亂碼問題。
,推薦用 useBodyEncodingForURI="true"
Spring MVC Controller中解析GET方式的中文參數會亂碼的問題(tomcat如何解碼)