JAVA 中URL中文參數亂碼的處理方法

       一般情況下url中文參數亂碼,只要設置好頁面編碼格式,然後把tomcat的server.xml設置一下就好了,但是現在這個項目因爲tomcat下面放的不止一個項目,改設置可能會引起其他項目的編碼問題,所以不能改,爲此頗糾結了一番,而網上很多方法就是用escape()、encodeURI()、encodeURIComponent()來編碼,然後去後天通過硬編碼new String(s.getBytes("iso-8859-1"),"gbk"); 但是很顯然  硬編碼是不行的,或者至少說不是通用的,換一個tomcat可能又錯了。上面的編碼方式只能把ISO的編碼轉成GBK,但是如果換一個tomcat,已經設置了UTF-8編碼,那麼這種編碼肯定會出錯。

     1、ajax提交亂碼

     提交方式1:

$.ajax({  
   url:'<%=basePath%>/pages/getInfo.do', 
   type: "POST",
   data:'TXTCONTENT=updateContactToServer&userInfo='+userid+"&groupId="+zd,
   success: function(jsonstr){
	       var uid = $("#hideUserId").val();
	    }	
});  
      提交方式2:

$.ajax({  
   url:'<%=basePath%>/pages/getInfo.do?TXTCONTENT=updateContactToServer&userInfo='+userid+"&groupId="+zd, 
   type: "POST",
   success: function(jsonstr){
	        var uid = $("#hideUserId").val();
	    }	
});         	
以上兩種ajax提交方法如果參數userid是中文,那麼第一種提交方法不會有問題,而方法二會有問題,原因我不是很清楚,但是分析一下,應該是第二種提交方式把參數作爲URL  然後再tomcat中對URL用ISO-8859-1解碼,所以中文出現亂碼。而第一種提交方式中參數是在表單中提交,tomcat只對URL轉碼,所以中文參數不會出現亂碼。只是個人分析,如有錯誤,求高人指點!如果有人用ajax提交出現亂碼了,可以試試第一種方式提交一下。

       2、普通的URL請求亂碼。

       網上很多人給出escape()、encodeURI()、encodeURIComponent()的解決方法,具體三個方法我就不解釋了,網上很多。我想說的是 只用三個方法中的一個類似這樣

      var url='<%=basePath%>/pages/deleteGroup.do?zdName='+encodeURIComponent(zdname)+"&groupId="+hideZD+"&count="+s; ;
      window.location.href=url;

    是不行的,到後臺依然會出現亂碼,必須用兩次

     var url='<%=basePath%>/pages/deleteGroup.do?zdName='+encodeURIComponent(zdname)+"&groupId="+hideZD+"&count="+s; ;
     window.location.href=encodeURI(url);
  這樣在後臺纔不會出現亂碼,只不過我們在後臺要用URLDecoder.decode("zdname", "UTF-8");解碼一次!

      原因分析:在頁面用encodeURIComponent或者encodeURI轉碼,能轉成十六進制的字符串,但是在往服務器傳遞過程中URL首先要經過tomcat  而tomcat會對URL解碼成中文,這樣tomcat再傳遞到後臺還是會出現中文亂碼,而用encodeURIComponent轉碼兩次的話,經過tomcat轉碼一次,還是十六進制字符串,在傳遞給服務器時接收的就還是轉碼後的字符串,然後我們在java代碼中用URLDecoder解碼一次就能出現正確中文了!

       同時,如果是java代碼中使用httpclient的時候中的URL也可以URLEncoder和URLDecoder來轉碼和解碼,原理一樣。

       結語: 關於URL亂碼的問題,網上很多都是講解encodeURIComponent 或者是通過new String(s.getBytes("iso-8859-1"),"gbk");來解決,以上兩種方法是我經過多次實驗後獲得的,原因分析可能不對,但是確實有用。如果對你有幫助,贊一個。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章