1. 程式人生 > >更改Tomcat字元編碼設定及解決post請求中文字元亂碼

更改Tomcat字元編碼設定及解決post請求中文字元亂碼

我遇到這個問題的時候是在做一個第三方支付介面的時候,在回撥函式中,解碼URL的時候怎麼解都不好使,解出來是亂碼的問題,搞了半天沒解決,百度找到了另一種方法。

這是第一種方法

new String(getURLDecoderString(json).getBytes("ISO-8859-1"),"utf-8")//json是你要解碼的東西

第二種方法,後來的時候公司的以為大佬指點,出現這種情況的原因是因為tomcat預設編碼的問題,一般情況下要設定tomcatget請求只需要在server.xml中加上如下配置。

<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"  redirectPort="8443" useBodyEncodingForURI="true"/>

但是這種配置設定編碼的方法只對get請求有效但是對於post請求沒有用

Post請求需要指定它傳送的引數和值的編碼。因為大多數客戶端並沒有設定一個明確的編碼,預設採用的是ISO-8859-1。大多數情況下,這並不是我們想要的編碼,我們可以使用過濾器來進行控制,Tomcat已經提供了完成這個功能的過濾器的例子或者內建了。請參看:

<!--4.x-->

webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java

<!--5.x-->

webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java
webapps/jsp-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java

<!--6.x-->

webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java

<!--7.x (已經將這個Filter加入Tomcat內建了,具體位置:tomcat目錄下的conf/web.xml,直接複製一下程式碼到你的專案web.xml中)-->

<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>