<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    關注技術,關注生活

    任何事情只要開始去做,永遠不會太遲。
    posts - 5, comments - 23, trackbacks - 0, articles - 18
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    當AJAX遭遇GBK的尷尬

    Posted on 2006-12-30 13:34 errorfun 閱讀(3981) 評論(6)  編輯  收藏 所屬分類: Ajax

    我在之前的一篇文章《struts,ajax亂碼解決方案》中講到ajax提交亂碼的解決方案。這個方案在utf-8的編碼下,不管提交或獲取都沒有變成亂碼,但當你的客戶端是GBK編碼時提交就會出現亂碼(獲取時不會)。BeanSoft 說用encodeURIComponent保險,呵呵,這個不是我沒試過,從一開始我就試過了encodeURIComponent ,escape,encodeURI,但最后出來的結果都沒我說的那種好。它們使用的結果如下:
    escape? 后提交,getParameter出來的是null,
    encodeURI 后提交,和沒使用用的時候是一個樣,
    encodeURIComponent? 后提交,包含特殊字符的請求都無法取得正確的值。

    使用GBK編碼提交后的數據在使用服務器端用new String( value.getBytes("gbk"), "utf-8")后部分可以恢復正確的中文,但有一部分無法恢復,這個原因估計是AJAX提交時設置了編碼為UTF-8,但我字符的實際編碼是GBK,所以在提交用用request.getParameter()獲得的數據是用UTF-8的編碼在GBK的字符集中找字符,像我在《struts,ajax亂碼解決方案》中說的那樣,UTF-8的編碼可能有1位2位或3位16進制,如果它這個編碼剛好是2位的話,那在GBK可以找到正確的字符(但并不是正確的),但如果是三位呢?那就慘了,它后面的字符全部就會變成亂碼,比如%6D%51%C5 %E5%23%1C分別表示一個UTF-8編碼的中文字符,那如果在GBK中,就會把它當成三個字符去查找,當然肯定是找不到的,有些找到的也是你讀都讀不出來的。用new String( value.getBytes("gbk"), "utf-8")后就是用GBK的編碼在UTF-8的字符集中查找字符,如果剛好你的字符在UTF-8編碼中全部是2位的話,那就能正確恢復,如果不是的話。。。。。。

    現在還沒找到在GBK編碼下比較好的解決方案,但今天看到BeanSoft 的一篇文章《JSP 中 AJAX 的表單提交中文問題的簡單解決方案》說到使用BASE64的方法,這個倒是沒有試過,過兩天放假的時候就試一下,如果成功了就跟大家共享一下。

    PS:因為項目用也用到了FILTER,在提交后第一時間會被改變字符編碼,不知道是不是這個增加的亂碼解決的復雜性,當然我也試過在getParameter之前改變它的編碼回utf-8,但結果是一樣的。


    評論

    # re: 當AJAX遭遇GBK的尷尬  回復  更多評論   

    2006-12-31 13:15 by superer
    我在項目中也遇到了相同的問題
    假設我使用ajax的方式向后臺提交參數 test=測試數據
    我會發(fā)現使用new String( value.getBytes("gbk"), "utf-8")轉換回來的
    數據為test=測試數? ,但是如果參數最后是以英文結束的時候就沒有問題
    例如test=測試數據abc,那么使用new String( value.getBytes("gbk"), "utf-8"),就可以正確得到test=測試數據abc

    # re: 當AJAX遭遇GBK的尷尬  回復  更多評論   

    2006-12-31 14:59 by BeanSoft
    偶發(fā)表了一篇文章, 幫忙測試測試, 但愿在你們的方案中能通過. JSP 中 AJAX 的表單提交中文問題的簡單解決方案 - GBK 版本(原創(chuàng)) http://m.tkk7.com/beansoft/archive/2006/12/31/91144.html 測試通過: Resin 3.0.18, Tomcat 5.0.30, 5.5.20; 瀏覽器: IE 6/Firefox 2.0

    # re: 當AJAX遭遇GBK的尷尬  回復  更多評論   

    2006-12-31 16:06 by errorfun
    好,馬上看看。試下能否成功

    # re: 當AJAX遭遇GBK的尷尬  回復  更多評論   

    2006-12-31 17:23 by errorfun
    根據beanSoft的  JSP 中 AJAX 的表單提交中文問題的簡單解決方案 - GBK 版本(原創(chuàng)) http://m.tkk7.com/beansoft/archive/2006/12/31/91144.html
    果然可以解決,不得不汗一個,在GBK編碼下,無論如何都不能用SEND方法發(fā)送參數,而要把參數加到URL中然后OPEN,不管是GET或POST都這樣,真暈了。
    使用encodeURIComponent 后的參數必須為UTF-8,如果不用的話就是XMLHTTP設置在CONTENT-TYPE中的CHARSET的編碼,獲取后可以用
    new String( value.getBytes("iso-8859-1"), "utf-8")

    new String( value.getBytes("iso-8859-1"), your_contenttype_charset)

    # re: 當AJAX遭遇GBK的尷尬  回復  更多評論   

    2006-12-31 17:29 by BeanSoft
    謝謝測試! 不過你這種方式就是模擬GET了. 共同進步, 互相幫助. 你那個設置 content-type 的 charset 也很有用處的.

    # re: 當AJAX遭遇GBK的尷尬  回復  更多評論   

    2007-01-02 19:20 by errorfun[匿名]
    要謝謝你才是啊。不過不用這種GET方法試來試去都不行啊。

    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 啦啦啦中文在线观看电视剧免费版 | 四虎永久精品免费观看| 亚洲福利电影在线观看| 无码人妻丰满熟妇区免费| 久久久久亚洲精品无码系列| 免费一区二区无码东京热| 9420免费高清在线视频| 久久精品国产亚洲AV无码麻豆| 久久精品国产大片免费观看| 国产免费爽爽视频免费可以看| 久久亚洲精品11p| 亚洲精品视频免费| 亚洲综合国产成人丁香五月激情 | 国产精品亚洲va在线观看| 在线免费观看韩国a视频| 亚洲人成精品久久久久| 免费精品一区二区三区第35| 911精品国产亚洲日本美国韩国 | 免费日本黄色网址| 国产视频精品免费视频| 永久免费av无码网站韩国毛片| 2020久久精品亚洲热综合一本| 性做久久久久免费看| 国产美女视频免费观看的网站| 亚洲AV永久纯肉无码精品动漫| 青青视频观看免费99| 久久久久亚洲国产AV麻豆| 综合亚洲伊人午夜网| 91香蕉成人免费网站| 亚洲国产精品自在在线观看| 国产V片在线播放免费无码| 五月天网站亚洲小说| 国产成人免费高清激情视频| 免费无毒a网站在线观看| 青春禁区视频在线观看直播免费| 亚洲高清一区二区三区电影| 精品久久久久久久久免费影院| 国产亚洲男人的天堂在线观看 | 免费黄色大片网站| 亚洲欧洲日本国产| 久久精品免费一区二区|