更改Tomcat字元編碼設定及解決post請求中文字元亂碼
阿新 • • 發佈:2018-12-16
我遇到這個問題的時候是在做一個第三方支付介面的時候,在回撥函式中,解碼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>