java中解決request中文亂碼問題

Franson發表於2016-08-23

request亂碼問題(當我們提交的資料中含有中文資訊時),分兩種情況:

  • 通過post方式提交資料給Servlet

       Servlet服務端部分程式碼:

       

public void doPost(httpServletRequest request, httpServletResponse response)

                         throws ServletException, IOException{

             //在獲取使用者表單資訊之前把request的碼錶設定成UTF-8,

             //如果沒這句的話,如果提交中文資訊的時候,會亂碼。

             request.setCharacterEncoding("UTF-8");             

             String value = request.getParameter("username"); //從request中獲取客戶端提交過來的資訊

             System.out.println(value);

       }

 

  • 通過get方式提交資料給Servlet (要手動處理)

       Servlet服務端部分程式碼:

      

 public void doGet(httpServletRequest request, httpServletResponse response)

                         throws ServletException, IOException{

             //從request中獲取客戶端提交過來的中文資訊,獲取到亂碼  

             String value = request.getParameter("username"); 

             //拿到亂碼反向查詢 iso-8859-1 碼錶,獲取原始資料,

             //在構造一個字串讓它去查詢UTF-8 碼錶,已得到正常資料

             value1 = new String (value.getBytes("iso-8859-1"), "UTF-8") ; 

             System.out.println(value);          

                   }

 

  • 用超連結提交表單資訊(通過 get 方式提交,需呼叫到doGet方法)

       

<a href="/Servlet/test?username=江西">登入<a/>

 總結:

   通過get提交表單資訊有兩種: 

     1.通過form表單的 method 設定 get方法提交(即method="get") 預設也是 get

       通過get方法提交到 Servlet程式中, 首先是得到表單的資訊,但是亂碼,

       然後還得手動去設定編碼方式

       即 value1 = new String (value.getBytes("iso-8859-1"), "UTF-8")

 

     2.通過超連結提交

 

   通過post提交表單:

       在form表單的 method 設定 post方法提交(即method="post") ,

       通過post方法提交到 Servlet程式中,request 要在得到表單資訊之前 設定編碼方式

       即 request.setCharacterEncoding("UTF-8");

 

get: 通過get提交表單的資訊,位址列上可以看到,安全性不好

post:通過post提交表單的資訊,位址列上看不到表單的資訊,

 

出現這種機制的原因:

      在於http協議上,通過get提交的資訊加在url後面,所以能看到;

      通過post提交的資訊是在請求體上的,也就是你敲了兩次回車後,傳送的資訊,所以看不到

 

如果以上方法沒有效果,可以嘗試使用java.net.URLDecoder.decode(URIString, "UTF-8")方法:

encodeURI和decodeURI是成對來使用的,因為瀏覽器的位址列有中文字元的話,可以會出現不可預期的錯誤,所以可以encodeURI把非英文字元轉化為英文編碼,decodeURI可以用來把字元還原回來。encodeURI方法不會對下列字元進行編碼:":"、"/"、";" 和 "?",encodeURIComponent方法可以對這些字元進行編碼。 
decodeURI()方法相當於java.net.URLDecoder.decode(URIString, "UTF-8"); 
encodeURI()方法相當於java.net.URLEncoder.encode(URIString, "UTF-8"); 

二、例子 

<script type="text/javascript"> 
var uriStr = "http://www.baidu.com?name=張三&num=001 zs"; 
var uriec = encodeURI(uriStr); 
document.write("編碼後的" + uriec); 
var uridc = decodeURI(uriec); 
document.write("解碼後的" + uridc); 
</script> 

編碼後的http://www.baidu.com?name=%E5%BC%A0%E4%B8%89&num=001%20zs 
解碼後的http://www.baidu.com?name=張三&num=001 zs

相關文章