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

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

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

    當柳上原的風吹向天際的時候...

    真正的快樂來源于創造

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    說明:下文涉及的內容只限于對前端jsp和后臺servlet的代碼修改,不涉及Web容器和數據庫的相關修改。
    我的測試環境是:英文XP操作系統,容器采用Tomcat6,前臺是jsp,后臺Servlet,Ajax框架采用prototype1.6.0

    Web編程中前后端亂碼問題發生的根源
    從前端jsp到后臺的Servlet,中間傳輸過程中的默認編碼方式是ISO-8859-1,這種編碼方式是西歐字符集,包括英語,德語,丹麥語,芬蘭語等,其它語言如中文日文等是不兼容的,如不經轉換或是設置直接在Servlet中用request.getParameter(paramName)這種方式直接拿出來中文部分就會得到亂碼,但英語,字母,數字組合成的字符串是不會變成亂碼的。

    常見的編碼解決亂碼問題的方式有
    • new String(request.getParameter(paramName).getBytes("ISO-8859-1"),"頁面字符集");
    • HttpServletRequest.setCharacterEncoding("頁面字符集");
    • URLDecoder.decode(str, "UTF-8");
    它們各自用在不同的場合,這里的頁面字符集指GBK,GB2312,UTF-8等,它們通常和jsp頁面設定的字符集(charset)一致。

    如果是將form通過post方式提交,在servlet的doPost函數開頭(對于Struts寫在execute函數開頭)寫上request.setCharacterEncoding("jsp網頁字符集")就可以直接用request.getParameter(paramName)直接得到文字,不需要經過再轉碼。這里需要注意的是form的action如果不直接寫成post的話,是會以get方式提交,這時request.setCharacterEncoding就會失效。

    如果不管是post還是get方式,想做一個通用方案,則可以通過new String(request.getParameter(paramName).getBytes("ISO-8859-1"),"jsp網頁編碼方式")得到轉碼后正常的文字,這種方式只要知道網頁的字符集,幾乎都能還原成正確的文字,適用性很廣,在Servlet和Action中很常見。

    如果是Ajax提交方式,則在servlet或是action中書寫request.setCharacterEncoding("jsp網頁字符集")是沒有效果的,經過對提交的URL用一次javascript的encodeURI函數編碼后,用 new String(request.getParameter(paramName).getBytes("ISO-8859-1"),"jsp網頁字符集")可以得到正確的文字。但如果不用encodeURI函數處理提交的url則不會正確的文字。

    Ajax提交中文的另一種方式可以用javascript的encodeURI函數對提交的URL進行兩次編碼,而后臺采用URLDecoder.decode(request.getParameter(paramName), "UTF-8")得到正確的文字。

    上面兩種方式都借助了avascript的encodeURI函數的幫助,它能將字符串進行utf-8編碼,其中,第二種方式確定性很高,推薦。

    具體方式請參考下面給出的例程,里面含有12個例子,分別對應了多種情況:
    http://m.tkk7.com/Files/heyang/DisorderCode2011-01-31.zip



    參考文章:
    深入淺出 web 編碼(轉載整理)
    http://m.tkk7.com/heyang/archive/2011/01/26/343570.html
    posted on 2011-01-30 18:07 何楊 閱讀(1841) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 国产精品亚洲二区在线| 国产性爱在线观看亚洲黄色一级片| 久久亚洲精品成人综合| 精品一区二区三区高清免费观看| 亚洲AV日韩精品一区二区三区| 女bbbbxxxx另类亚洲| 午夜国产大片免费观看| 一区二区三区视频免费| 精品亚洲成α人无码成α在线观看| 国产高清对白在线观看免费91 | 一区二区无码免费视频网站 | 亚洲色图古典武侠| 在免费jizzjizz在线播| 激情内射亚洲一区二区三区爱妻| 99精品国产免费久久久久久下载| 亚洲宅男精品一区在线观看| 麻豆国产人免费人成免费视频| 337P日本欧洲亚洲大胆精品| 亚洲日本在线观看视频| 大地影院MV在线观看视频免费| 亚洲精品韩国美女在线| 午夜毛片不卡高清免费| 九九免费久久这里有精品23| 亚洲AV永久无码精品成人| 国产又大又粗又长免费视频| 亚洲av纯肉无码精品动漫| 国产综合亚洲专区在线| 日韩精品免费一级视频| 欧美色欧美亚洲另类二区| 亚洲自偷自偷图片| 成人免费毛片内射美女-百度| 免费在线观看亚洲| 久久精品国产亚洲AV嫖农村妇女| 免费可以看黄的视频s色| 欧洲乱码伦视频免费国产| 亚洲AV无码一区二区三区系列| 成人激情免费视频| 日韩免费高清播放器| 亚洲熟妇AV日韩熟妇在线| 亚洲色欲一区二区三区在线观看 | 国产精品玖玖美女张开腿让男人桶爽免费看 |