在Controller中接收到的POST參數如果是中文的話,顯示為亂碼。已知客戶端傳過來時編碼為UTF-8。
問題產生分析:
spring MVC中默認的編碼格式為“ISO-8859-1”,因此造成亂碼。
簡單的解決方式:
New String(request.getParameter("xxx").getBytes("iso-8859-1"),"utf-8")
最好的解決方式:
在web.xml中配置Spring字符過濾器,添加:
<!-- Spring字符集過濾器 -->
<filter> <filter-name>SpringEncodingFilter</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>SpringEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
GET方法接收到中文亂碼在tomcat的server.xml添加URIEncoding="utf-8"
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 變更為: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/>
-
<!-- Spring字符集過濾器 -->
-
<filter>
-
<filter-name>SpringEncodingFilter </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>
-
<init-param>
-
<param-name>forceEncoding </param-name>
-
<param-value>true </param-value>
-
</init-param>
-
</filter>
-
<filter-mapping>
-
<filter-name>SpringEncodingFilter </filter-name>
-
<url-pattern>/* </url-pattern>
-
</filter-mapping>