Web亂碼與字符集的理解

磁盤上文件的存儲形式:所有文件的儲存是都是字節(byte)的儲存,在磁盤上保留的並不是文件的字符而是先把字符編碼成字節,再儲存這些字節到磁盤。在讀取文件(特別是文本文件)時,也是一個字節一個字節地讀取以形成字節序列.

字符編碼(encoding)就是把字符按照某種映射標準(字符集)轉換成字節。例如打開一個空記事本,然後在記事本中寫入"hello world"--〉另存爲(默認的ASICC字符集)--->asc.txt 這時asc.txt就以ASCII編碼的字節序列存儲在磁盤上,如果要讀這個文件,也就是將這個字節序列按照原字符集轉換成字符串(解碼:decoding),所以處理好編碼<=>字符集<=>解碼就是關鍵.

字符集就像棋盤,每個字符(棋子)用一個字節(棋格)映射。

 

ISO8859:8位的字符集,0~0x7F仍與ASCII字符集保持兼容,大於0x7F的是各種拉丁字符或歐洲字符的擴展。

GB2312: 8位的字符集,如果當前字節(8 bit)小於0X80,則仍當它爲英文字符與(ASCII兼容);如果它大於等於0x80,則它和緊接着它的下一個字節構成一個漢字字符,這樣,GB2312字符集可包含大約4000多個常用簡體漢字和其他漢字中的特殊符號(如①㈠之類)。

GBK:GB2312的擴展集,和GB2312兼容.

Unicode: 16位的字符集,Unicode的主要目標是提供一個“通用字符集”。

 

UTF-8: Unicode的使用、存儲與傳輸,都極其浪費空間,所以在此基礎上出現了UTF-8字符編碼的規範,在UTF-8中,屬於US-ASCII中的字符,仍用一個字節表示,且和US-ASCII兼容,編碼其他的字符,則用1(大於0x7F部分)到3個字節. (編碼中文用3個字節) 

 

JVM編譯器使用系統默認的字符集encoding/decoding.我的系統爲win2000Server 默認字符集爲GBK。編譯過程如下

 

1.javac Test.java ===>編譯器實際上執行了 javac -encoding GBK Test.java

 

2.在類裝載器中加載這個Test.class文件,編譯器再用GBK字符集解讀這個Test.class 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章