1. 程式人生 > >######mybatis頁面get請求傳參亂碼,controller接收到亂碼(特殊字元,不是問號那種)

######mybatis頁面get請求傳參亂碼,controller接收到亂碼(特殊字元,不是問號那種)

====post請求,web.xml Spring編碼過濾器解決了。

===但是get請求。還是不行。

===######=查到修改tomcat的server.xml。但是說的不清楚。

######【我修改的本地tomcat沒用。只用修改eclipse裡server中的server.xml才有用。】昌哥幫我解決的。。。

===原因是eclipse備份了server.xml。

1.問題產生:


2.問題解決:不需要手動 getByte()那種轉碼。


=====#########====小結:這種亂碼原因是編碼庫不匹配。

①“?”這種亂碼原因是:底層二進位制缺位元組。

===原因:【對已經編碼一次,亂碼之後的String再進行utf-8編碼《轉碼了兩次:對已經亂碼的字元再進行轉碼》】,就轉不回來了。

===因為亂碼後的缺少位元組。

②“這裡遇到的 特殊字元”形式的亂碼。

==原因:【直接對 ISO-8859-1進行 utf-8 轉碼,《只轉碼了一次!》】

===tomcat 的server.xml裡沒有配置URIEncoding="utf-8",預設是ISO-8859-1

==================================知道原因:解決起來比較有思路。

具體操作:

參考:http://blog.csdn.net/u010648555/article/details/50011987

========轉載:

    在專案中經常會遇到中文傳引數,在後臺接收到亂碼問題。那麼在遇到這種情況下我們應該怎麼進行處理讓我們傳到後臺接收到的引數不是亂碼是我們想要接收的到的,下面就是我的一些認識和理解。

 一:get請求url中帶有中文引數,有三種方式進行處理防止中文亂碼

    1、如果使用tomcat作為伺服器,那麼修改tomcat配置檔案conf/server.xml中,在  <Connector port="8082" protocol="HTTP/1.1"  中加入  URIEncoding="utf-8"的編碼集

    2、前臺需要對中文引數進行編碼,呼叫js方法encodeURI(url),將url編碼,然後請求。

                  後臺接受時,需處理String str = new String(request.getParameter("param").getBytes("iso8859-1"),"UTF-8")

;

                 原因:tomcat不設定編碼時,預設是iso8859-1,即tomcat預設會以iso8859-1編碼接收get引數。 以上操作是將引數以iso8859-1編碼轉化為位元組陣列,然後再以UTF-8將位元組陣列轉化為字串。

                  另外需注意在框架的使用中:request.setCharacterEncoding(encoding);只對post請求有效。而且,spring的CharacterEncodingFilter也只是做了request(和response).setCharacterEncoding(encoding);的操作。所以spring的filter配置不作用於get引數接收。

    3、解決get請求,後臺接受中文引數亂碼處理的方法(搜尋功能帶引數)

           (1)前臺獲取資料,在js中進行編碼處理

 

             encodeURI函式採用utf-8進行編碼,而在伺服器的進行解碼時候,預設都不是以uft-8進行解碼,所以就會出現亂碼。

兩次encodeURI,第一次編碼得到的是UTF-8形式的URL,第二次編碼得到的依然是UTF-8形式的URL,但是在效果上相當於首先進行了一 次UTF-8編碼(此時已經全部轉換為ASCII字元),再進行了一次iso-8859-1編碼,因為對英文字元來說UTF-8編碼和ISO- 8859-1編碼的效果相同。

 (2)後臺解碼處理

後臺接收引數時候,首先通過request.getParameter()自動進行第一次解碼(可能是 gb2312,gbk,utf-8,iso-8859-1等字符集,對結果無影響)得到ascii字元,然後再使用UTF-8進行第二次解碼,通常使用 java.net.URLDecoder("","UTF-8")方法。

 

兩次編碼兩次解碼的過程為:

UTF-8編碼->UTF-8(iso-8859-1)編碼->iso-8859-1解碼->UTF-8解碼,編碼和解碼的過程是對稱的,所以不會出現亂碼。

注:

   1:這種兩次encodeURI方式不用去知道伺服器的解碼方式,也可以得到正確的資料。

   2:get請求建議儘量不帶中文引數,如果使用建議使用兩次encodeURI進行編碼

   3.參考資料     URL編碼與兩次encodeURIhttp://blog.sina.com.cn/s/blog_8af112fd0102vxb7.html