問題描述:
我在js中建立一個數組items,如下:items=[{name:'中文'}],我把這個數組轉換成字元串發往背景,背景接收資料并存入資料庫:
js 代碼
- Ext.Ajax.request({
- url:'',
- params:{
- items:Ext.util.JSON.encode(items)
- },
- method:"POST",
- success:function(){alert("成功")}
- });
結果這樣傳送的字元串不能正确的得到解析,無論在firefox下觀察params的串還是背景接收的資料都是亂碼。于是我改了下代碼: js 代碼
- Ext.Ajax.request({
- url:'',
- params:{
- items:encode(Ext.util.JSON.encode(items)) //就是将字元串編碼一下
- },
- method:"POST",
- success:function(){alert("成功")}
- });
這樣,傳輸的字元串是以utf-8的編碼方式。
然而,這樣在背景接收資料并存儲到資料庫仍然是亂碼的形式,我背景全部都是以UTF-8編碼方式。
解決:
試了好長時間,最後終于解決,方法很簡單,在背景加入這樣一行代碼:
java 代碼
- String str=req.getParameter("items");
- str=java.net.URLDecoder.decode(str, "UTF-8");
這行代碼的意思是把得到的
application/x-www-form-urlencoded
編碼方式的字元串解碼成utf-8編碼方式。
請教:(雖然在網上找到很多關于亂碼問題的解決辦法,但大都不能針對自己的問題。)
雖然已經解決了亂碼問題,但實際上我還不是很明白在js不進行encode而直接傳送為什麼會是亂碼,難道Ext的Ajax不是預設UTF-8編碼方式?。請大家指教!!!