itVincent Blog - Java Working Fun!

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

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

          Posted on 2009-03-16 16:06 itVincent 閱讀(1494) 評論(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的道理....
          主站蜘蛛池模板: 西安市| 赤峰市| 永济市| 托里县| 乌鲁木齐县| 大英县| 宁国市| 都兰县| 招远市| 文山县| 乌兰浩特市| 日喀则市| 都江堰市| 新营市| 无为县| 平和县| 莱西市| 合江县| 灵川县| 石渠县| 白水县| 鹤庆县| 醴陵市| 襄城县| 五大连池市| 芜湖县| 侯马市| 定州市| 景谷| 开平市| 辽中县| 定结县| 嘉善县| 皮山县| 武夷山市| 阿坝县| 遵化市| 肥城市| 伽师县| 岳普湖县| 呼和浩特市|