1. 程式人生 > >解決jquery ajax中文傳遞到後端出現亂碼問題 java

解決jquery ajax中文傳遞到後端出現亂碼問題 java

        這幾天,好久沒有寫過了,今天一個ajax提交中文亂碼的問題需要解決,在徘徊了一天,看到了一個人的高見,必殺技解決了這個問題,頁面有個中文搜尋需要傳遞到後臺,發現jquery都會出現中文亂碼,有人說可以採用encodeURI對中文編碼,是的這個是個好的辦法,但是也存在著問題,後臺伺服器解碼後通過: new String(傳過來的引數.getBytes("ISO8859_1"),"UTF-8")這樣轉換回來,這樣能轉換成功的前提是,我們知道伺服器採用了ISO8859_1編碼,如果不是,這樣我們就只剩下乾瞪眼了,在解決這個問題間,我在別人的一個發帖的回覆中,看到了一個牛人提出的一個必殺技,稱之為必殺技確實它可以順利解決你中文在頁面編碼一次,後臺就能直接通過伺服器解碼得到中文,連那個string編碼轉換都省了,附上他的必殺技:在tomcat的server.xml中的

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>這段中加上 URIEncoding="utf-8",這個確實是個好想法,但是公司的人員都是人來人往,可能開發的人知道把這個tomcat的配置加上這個,但是某天換了一個人,tomcat重新部署,可以這個注意項可能就遺忘在漫漫的歲月中了,況且可能將來的someday,不用tomcat這個問題又會出現,雖然效果是挺好,但是後遺症比較麻煩,在一個人的部落格中看到了一個方式,這個方式我比較推崇,真是一個一勞永逸的方式,簡單說說這個原理,那就是對中文的欄位在前端進行編碼兩次,英文編碼後傳到後臺是什麼就是什麼,編碼一次,到後臺伺服器自動解碼,這樣中文會因為伺服器的預設編碼發生變化,兩次編碼的話伺服器解碼一次,還剩一次編碼,這樣不會因為伺服器的編碼而發生編碼(因為編碼後都是數字和字母以及%),這樣再解碼一次,就可以轉換為中文了。這樣就繞過了不知道到伺服器的預設編碼是什麼的問題。完美解決。附上,前端編碼與後端解碼的語句:

前端編碼兩次:encodeURI(encodeURI(要編碼的中文),'')

後端解碼:URLDecoder.decode(request.getParameter(對應的欄位名稱), "UTF-8")

或者把請求方式變為post也能解決這個問題,想後端通過http的方式呼叫遠端的介面,可以把中文編碼,對header中加入

httpGet.setHeader("Content-Type","application/text; charset=UTF-8");這樣相當於告訴了接收方字元的型別和編碼方式。