天天看點

AJAX POST時的中文亂碼問題和解決

問題描述:

       我在js中建立一個數組items,如下:items=[{name:'中文'}],我把這個數組轉換成字元串發往背景,背景接收資料并存入資料庫:

js 代碼  

  1. Ext.Ajax.request({  
  2.         url:'',  
  3.         params:{  
  4.             items:Ext.util.JSON.encode(items)  
  5.         },  
  6.         method:"POST",  
  7.         success:function(){alert("成功")}  
  8. });  

結果這樣傳送的字元串不能正确的得到解析,無論在firefox下觀察params的串還是背景接收的資料都是亂碼。于是我改了下代碼: js 代碼  

  1. Ext.Ajax.request({  
  2.         url:'',  
  3.         params:{  
  4.             items:encode(Ext.util.JSON.encode(items))   //就是将字元串編碼一下  
  5.         },  
  6.         method:"POST",  
  7.         success:function(){alert("成功")}  
  8. });  

這樣,傳輸的字元串是以utf-8的編碼方式。

然而,這樣在背景接收資料并存儲到資料庫仍然是亂碼的形式,我背景全部都是以UTF-8編碼方式。

解決:

        試了好長時間,最後終于解決,方法很簡單,在背景加入這樣一行代碼:

java 代碼  

  1. String str=req.getParameter("items");  
  2. str=java.net.URLDecoder.decode(str, "UTF-8");  

這行代碼的意思是把得到的

application/x-www-form-urlencoded

編碼方式的字元串解碼成utf-8編碼方式。

請教:(雖然在網上找到很多關于亂碼問題的解決辦法,但大都不能針對自己的問題。)

       雖然已經解決了亂碼問題,但實際上我還不是很明白在js不進行encode而直接傳送為什麼會是亂碼,難道Ext的Ajax不是預設UTF-8編碼方式?。請大家指教!!!