itVincent Blog - Java Working Fun!

          技術(shù)引領(lǐng)時(shí)代!
          posts - 117, comments - 181, trackbacks - 0, articles - 12

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

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

          使用jQuery的ajax方法提交ajax請(qǐng)求,代碼如下:
          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}
          );

          問題:

          提交后后臺(tái)action程序時(shí),取到的type是亂碼

          解決方法:

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

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

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


          Feedback

          # re: Ajax中文亂碼問題及解決方法  回復(fù)  更多評(píng)論   

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

          # re: Ajax中文亂碼問題及解決方法  回復(fù)  更多評(píng)論   

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

          # re: Ajax中文亂碼問題及解決方法  回復(fù)  更多評(píng)論   

          2009-03-16 17:44 by 逝水fox
          用兩次的原因是 因?yàn)間etParameter的時(shí)候Java自己會(huì)解析一層編碼 如果原文是中文 你提交的時(shí)候只做了一層編碼的話 Java自動(dòng)解析可能會(huì)因?yàn)閮蛇吺褂玫木幋a不一致而造成亂碼
          編碼兩次就沒有問題了 因?yàn)榈谝淮尉幋a的結(jié)果不會(huì)有中文這些可能導(dǎo)致出錯(cuò)的符號(hào)

          不過(guò)這樣做 記的"+"符號(hào)這樣傳會(huì)有問題

          # re: Ajax中文亂碼問題及解決方法  回復(fù)  更多評(píng)論   

          2009-03-17 00:00 by stevenhong
          對(duì)于無(wú)狀態(tài)的web來(lái)說(shuō),哪有不傳contentType的道理....
          主站蜘蛛池模板: 焦作市| 乌鲁木齐县| 隆德县| 微博| 元阳县| 尼玛县| 炎陵县| 英德市| 江口县| 闵行区| 泰安市| 建德市| 衢州市| 万源市| 邮箱| 阜平县| 海盐县| 四子王旗| 治多县| 平泉县| 和田市| 丘北县| 中牟县| 睢宁县| 庆城县| 百色市| 绥滨县| 嘉定区| 布尔津县| 合水县| 廉江市| 保定市| 类乌齐县| 驻马店市| 阿荣旗| 阳谷县| 凤冈县| 阿克苏市| 砀山县| 田东县| 江油市|