itVincent Blog - Java Working Fun!

          技術引領時代!
          posts - 117, comments - 181, trackbacks - 0, articles - 12

          Ajax中文亂碼問題及解決方法

          Posted on 2009-03-16 16:06 itVincent 閱讀(1499) 評論(4)  編輯  收藏 所屬分類: Ajax
          場景:

          使用jQuery的ajax方法提交ajax請求,代碼如下:
          1$.ajax({
          2    dataType : 'json'
          3    ,type : 'POST'
          4    ,url : 'http://localhost/test/test.do'
          5    ,data : {id: 1, type: '商品'}
          6    ,success : function(data){
          7        
          8    }

          9}
          );

          問題:

          提交后后臺action程序時,取到的type是亂碼

          解決方法:

          方法一:提交前采用encodeURI兩次編碼,記住一定是兩次
          1.修改以下代碼
          data:{id:1, type:encodeURI(encodeURI('商品'))}
          2.在后臺action里要對取得的字符串進行decode
          1String type = request.getParameter("type");
          2type = URLDecoder.decode(type, "UTF-8");

          方法二:ajax配置contentType屬性,加上charset=UTF-8
          在ajax方法中加入以下參數
          1contentType: "application/x-www-form-urlencoded; charset=UTF-8"
          使用其它js框架或者xhr都是差不多,設置header中contentType即可,
          這里關鍵是charset=UTF-8,如果沒有這個,是不行的,默認jQuery里的contentType是沒有的.
          還補充一下jQuery里對參數已經進行了一次encodeURIComponent的處理

          *方法二在action里不需要進行decode,所以推薦使用此方法


          Feedback

          # re: Ajax中文亂碼問題及解決方法  回復  更多評論   

          2009-03-16 17:17 by wang.senyuan
          方法一為什么要兩次?

          # re: Ajax中文亂碼問題及解決方法  回復  更多評論   

          2009-03-16 17:43 by itVincent
          @wang.senyuan
          必須要兩次,不然decode了之后還是亂碼

          # re: Ajax中文亂碼問題及解決方法  回復  更多評論   

          2009-03-16 17:44 by 逝水fox
          用兩次的原因是 因為getParameter的時候Java自己會解析一層編碼 如果原文是中文 你提交的時候只做了一層編碼的話 Java自動解析可能會因為兩邊使用的編碼不一致而造成亂碼
          編碼兩次就沒有問題了 因為第一次編碼的結果不會有中文這些可能導致出錯的符號

          不過這樣做 記的"+"符號這樣傳會有問題

          # re: Ajax中文亂碼問題及解決方法  回復  更多評論   

          2009-03-17 00:00 by stevenhong
          對于無狀態的web來說,哪有不傳contentType的道理....
          主站蜘蛛池模板: 泰兴市| 观塘区| 略阳县| 清水县| 琼海市| 太谷县| 白朗县| 彰武县| 通化市| 万州区| 玉屏| 长白| 宁城县| 龙南县| 荥阳市| 孟津县| 景德镇市| 上蔡县| 宝应县| 石林| 梧州市| 安仁县| 即墨市| 台东县| 桃江县| 逊克县| 海晏县| 南昌市| 积石山| 景德镇市| 凤凰县| 内丘县| 璧山县| 古交市| 乐昌市| 太仓市| 浠水县| 大同市| 涞水县| 侯马市| 佳木斯市|