這幾天,好久沒有寫過了,今天一個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");這樣相當于告訴了接收方字符的型別和編碼方式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304004.html
標籤:其他
上一篇:2021-09-26
