1. 程式人生 > >JAVA中文亂碼解決辦法/修改TOMCAT預設編碼

JAVA中文亂碼解決辦法/修改TOMCAT預設編碼

頁面為UTF-8,jquery的ajax方法為utf-8傳值,中文會出現亂碼,給java頁面傳值時需要進行兩次轉碼encodeURI();

例如:

$.post("page.do",{str:encodeURI(encodeURI("中文"))},function(data){alert(data);})

程式頁面解析字串時需要使用ava.net.URLDecoder.decode進行解碼

例如:

String str= java.net.URLDecoder.decode(ServletActionContext.getRequest().getParameter("str"), "UTF-8");


以上是治標不治本,需要根除的話,需要修改TOMCAT的預設編碼。

我們通過 post 方法提交的引數實際上都是通過 uri 提交的,都由這個引數管理,如果沒有設定這個引數,則 tomcat 將使用預設的 iso8859-1 對客戶端的內容進行編碼。

useBodyEncodingForURI 使用與 Body 一樣的編碼來處理 URI, 這個設定是為了與 tomcat4保持相容。在 tomcat5 中,對post 的處理通過 前面的 URIEncoding 進行處理,對get 的內容依然通過 request.setCharacterEncoding 處理,為了保持相容,就有了這個設定。
將 useBodyEncodingForURI 設定為真後,就可以通過 request.setCharacterEncoding 直接解決 get 和 post 中的亂碼問題。
這樣,我們可以通過在 server.xml 中設定 URIEncoding 來解決 get 方法中的引數問題,使用過濾器來解決 post 方法中的問題。
或者也可以通過在 server.xml 中設定 useBodyEncodingForURI 為 true ,配合過濾器來解決編碼的問題。
在這裡,我強烈建議在網站的創作過程中,全程使用 utf-8 編碼來徹底解決亂碼問題。

TOMCAT中的server.xml中的 Connector中新增兩個設定useBodyEncodingForURI="true" //設定POST和GET使用相同編碼
URIEncoding="UTF-8" //對URI使用utf-8編碼處理
<Connector useBodyEncodingForURI="true" URIEncoding="UTF-8" connectionTimeout="20000" maxThreads="150" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>