隨筆-200  評論-148  文章-15  trackbacks-0
          我以前遇到這類問題的時候寫的,你可以參考一下:
          一.中文亂碼產生的原因
          a)亂碼有很多種,這里所說的是指web傳入的亂碼,即由瀏覽器傳輸數據到服務器發生的亂碼。

          b)常用的web傳輸方法有 post 和 get 2種,下面分別說明:
          i.? ? ? ? Post – 由于采用了特殊的加密,所以只要設置正確的Character Encoding即可,不會產生亂碼
          ii.? ? ? ? Get - 用此類方法傳輸的數據將以字符串的形式直接放在url后面,所以采用的是url 的encode,這種情況不僅會出現中文亂碼,而且假如參數里面帶有保留字符也將被轉義,特別地,如果參數中帶有&字符,將丟失后面的所有參數或 者值


          二.解決辦法
          解決中文亂碼(應該說是數據傳輸問題),主要應該從用法上解決。上面說了post方法只要設置了正確的Character Encoding,是不會產生亂碼的,所以應盡量采用post方法來傳輸數據;但是有時候采用get方法是比較方便的,或者是必須的,所以下面也分別介紹 2種的對應解決方案:
          a)? ? ? ? Post – 在web.xml設置filter,filter-class指定為平臺的SetCharacterEncodingFilter類,encoding設置為頁面使用的編碼,示例:
          <filter>
          ? ? ? ? <filter-name>Set Character Encoding</filter-name>
          ? ? ? ? <filter-class>
          ? ? ? ? ? ? ? ? //自己實現一個filter。。
          ? ? ? ? </filter-class>
          ? ? ? ? <init-param>
          ? ? ? ? ? ? ? ? <param-name>encoding</param-name>
          ? ? ? ? ? ? ? ? <param-value>UTF-8</param-value>
          ? ? ? ? </init-param>
          </filter>
          <filter-mapping>
          ? ? ? ? <filter-name>Set Character Encoding</filter-name>
          ? ? ? ? <url-pattern>/*</url-pattern>
          </filter-mapping>


          b)? ? ? ? Get – 解決的關鍵在于在傳輸之前調用url encoder對參數進行加密,采用的encoding應與服務器的encoding一致,這樣接收到數據的時候可以不做任何的轉碼。可由java和javascript2種辦法實現:
          i.? ? ? ? Java 實現方法(推薦)
          1.? ? ? ? 條件 - 如果要傳輸的數據是要先經過javabean生成,然后write 到頁面上的,可以采用這種方式。以下略,用java.net.URLEncoder.encode();


          ii.? ? ? ? Javascript 實現方法
          如果需要從頁面獲取輸入,則可以采用這種方式,但是這種情況又可以考慮是否可以轉換為post方法來傳輸。
          ? ?? ?? ?? ?下面是javascript的encode函數:
          1.? ? ? ? escape - 采用ISO Latin字符集對指定的字符串進行編碼。不會被此方法編碼的字符: @ * / +

          2.? ? ? ? encodeURI - 把URI字符串采用UTF-8編碼格式轉化成escape格式的字符串不會被此方法編碼的字符:! @ # $& * ( ) = : / ; ? + '

          3.? ? ? ? encodeURIComponent - 把URI字符串采用UTF-8編碼格式轉化成escape格式的字符串。不會被此方法編碼的字符:! * ( ) '

          posted on 2008-07-11 15:12 無聲 閱讀(458) 評論(0)  編輯  收藏 所屬分類: 職場生活
          主站蜘蛛池模板: 凌源市| 分宜县| 梅州市| 麻江县| 永修县| 石屏县| 五寨县| 平昌县| 兴城市| 利津县| 卫辉市| 中西区| 扬州市| 南昌市| 钦州市| 揭阳市| 北海市| 大渡口区| 吴忠市| 皮山县| 南川市| 建宁县| 宁阳县| 娄烦县| 华池县| 新密市| 库伦旗| 安西县| 邹城市| 陈巴尔虎旗| 东丽区| 凭祥市| 高雄市| 靖宇县| 营山县| 固原市| 北安市| 荣昌县| 威信县| 沽源县| 隆化县|