下面小編就為大家帶來一篇javaWEB中前後台亂碼問題的解決方法總結。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
JAVA中幾個常見的編碼格式及意義:
##ASCII碼
學過電腦的人都知道ASCII 碼,總共有128 個,用一個位元組的低7 位表示,0~31 是控製字元如換行回車刪除等;32~126 是列印字符,可以透過鍵盤輸入並且能夠顯示出來。ISO-8859-1
#128 字元顯然是不夠用的,於是ISO 組織在ASCII 碼基礎上又制定了一些列標準用來擴展ASCII 編碼,它們是ISO-8859-1~ISO-8859-15,其中ISO-8859-1 涵蓋了大多數西歐語言字符,所有應用的最廣泛。 ISO-8859-1 仍然是單字節編碼,它總共能表示 256 個字元。GB2312
它的全名是《訊息交換用漢字編碼字元集基本集》,它是雙位元組編碼,總的編碼範圍是A1-F7,其中從A1-A9 是符號區,總共包含682 個符號,從B0-F7 是漢字區,包含6763 個漢字。GBK
全名為《漢字內碼擴充規範》,是國家技術監督局為windows95 所製定的新的漢字內碼規範,它的出現是為了擴展GB2312,加入更多的漢字,它的編碼範圍是8140~FEFE(去掉XX7F)總共有23940 個碼位,它能表示21003 個漢字,它的編碼是和GB2312 相容的,也就是說用GB2312 編碼的漢字可以用GBK 解碼,並且不會有亂碼。GB18030
#全名為《訊息交換用漢字編碼字元集》,是我國的強制標準,它可能是單位元組、雙位元組或四位元組編碼,它的編碼與GB2312 編碼相容,雖然是國家標準,但實際應用系統中使用的並不廣泛。UTF-16
#說到UTF 必須要提到Unicode(Universal Code 統一碼),ISO 試圖想創建一個全新的超語言字典,世界上所有的語言都可以透過這本字典來相互翻譯。可想而知這個字典是多麼的複雜,關於 Unicode 的詳細規格可以參考對應文件。 Unicode 是 Java 和 XML 的基礎,以下將詳細介紹 Unicode 在電腦中的儲存形式。 UTF-16 具體定義了 Unicode 字元在電腦中存取方法。 UTF-16 用兩個位元組來表示 Unicode 轉換格式,這個是定長的表示方法,不論什麼字元都可以用兩個位元組表示,兩個位元組是 16 個 bit,所以叫 UTF-16。 UTF-16 表示字符非常方便,每兩個字節表示一個字符,這個在字符串操作時就大大簡化了操作,這也是 Java 以 UTF-16 作為內存的字符存儲格式的一個很重要的原因。UTF-8
#UTF-16 統一採用兩個位元組表示一個字符,雖然在表示上非常簡單方便,但是也有其缺點,有很大一部分字符用一個字節就可以表示的現在要兩個字節表示,存儲空間放大了一倍,在現在的網絡頻寬還非常有限的今天,這樣會增大網絡傳輸的流量,而且也沒必要。而 UTF-8 採用了一種變長技術,每個編碼區域都有不同的字碼長度。不同類型的字元可以是由 1~6 個位元組組成。UTF-8 編碼規則:
#1.如果一個位元組,最高位元(第8 位元)為0,表示這是一個ASCII 字元(00 – 7F)。可見,所有 ASCII 編碼已經是 UTF-8 了。 2.如果一個位元組,以 11 開頭,連續的 1 的個數暗示這個字元的位元組數,例如:110xxxxx 代表它是雙位元組 UTF-8 字元的首字節。 3.如果一個字節,以10 開始,表示它不是首字節,需要向前查找才能得到當前字元的首字節不同編碼格式的比較#
對中文字元後面四種編碼格式都能處理,GB2312 與 GBK 編碼規則類似,但是 GBK 範圍更大,它能處理所有漢字字符,所以 GB2312 與 GBK 比較應該選擇 GBK。 UTF-16 與 UTF-8 都是處理 Unicode 編碼,它們的編碼規則不太相同,相對來說 UTF-16 編碼效率最高,字元到位元組相互轉換更簡單,進行字串操作也更好。它適合在本機磁碟和記憶體之間使用,可以進行字元和位元組之間快速切換,如 Java 的記憶體編碼就是採用 UTF-16 編碼。但是它不適合在網路之間傳輸,因為網路傳輸容易損壞字節流,一旦字節流損壞將很難恢復,想比較而言UTF-8 更適合網路傳輸,對ASCII 字元採用單字節存儲,另外單一字符損壞也不會影響後面其它字符,在編碼效率上介於GBK 和UTF-16 之間,所以UTF-8 在編碼效率上和編碼安全性上做了平衡,是理想的中文編碼方式。
中文亂碼解決方案:
#1.tomcat的自帶編碼是ISO-8859-1的格式,是不相容中文的編碼的。採用相同的格式去接收(ISO-8859-1),然後用能解析的編碼(utf-8)去轉換。處理後再發往前台。發送到前台的時候需要設定:
res.setContentType("text/html;charset=utf-8");//設定頁面的字元編碼,解決介面顯示中文亂碼的問題;
2.req.setCharacterEncoding("utf-8");//必須寫在第一位,因為採用這種方式去讀取數據,否則數據會出錯。
3.Spring提供了一個CharacterEncodingFilter過濾器,可以用來解決亂碼問題。
CharacterEncodingFilter使用時需要注意問題:
表單資料以POST方式提交;
在web.xml中配置CharacterEncodingFilter過濾器
頁面編碼和過濾器指定編碼要保持一致
CharacterEncodingFilter配置範例:
##
<filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param=name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
以上是JavaWEB中關於前後台亂碼問題的解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!