常見字符集
咱們都知道中文是世界上文字符號最多的國家,中國的文字符號超過了非中文國家文字符號的總和,中華文明淵源流長啊!java
中文的字符集也是最複雜的字符集,爲了向後兼容,設計中文字符集的科學家們可謂煞費苦心。中文的字體更是複雜,有甲骨文、金文、還有簡體的繁體的中文,呵呵,不是一個概念,實際上都是中文,只是表現形式和歷史年代不同罷了,光收集這些文字就是個天量的工做,更別爲這些文字作字庫了。編程
若是有些生僻字沒字庫有編號,那麼就沒法正確顯示在技術算計上,或者沒編號、也沒字庫,這幾無法輸入了。或者是編碼不對,那麼顯示出來的將是亂碼,或者內容驢脣不對馬嘴。這些問題困擾了無數的「IT」民工,固然包括我在內,更多的時候,是由於對字符集自己沒有一個全面認識和理解致使。其次就是對編程語言處理字符集的方式沒有透徹認識致使。瀏覽器
下面就說說常見的字符集,這裏主要關注與中文相關的字符集,其餘非中文的鳥語字符集不是被中文字符集包含了或者就不重要,能夠忽略不計。編程語言
常見的字符集編碼以下:字體
ASCII
最先的也是最基本最重要的一種英美文字的字符集,也能夠說是編碼。ASCII被定爲國際標準以後的代號爲ISO-646。因爲ASCII碼只使用了低7位二進制位,其餘的認爲無效,它僅使用了0~127這128個碼位。剩下的128個碼位即可以用來作擴展,而且ASCII的字符集序號與存儲的編碼徹底相同。編碼
ISO-8859-*
隨着西歐國家的崛起,在ASCII的基礎上對剩餘的碼位作了擴展,就造成了一系列ISO-8859-*的標準。例如爲英語做了專門擴展的字符集編碼標準編號爲ISO-8859-1,也叫作Latin-1。因爲西歐小國衆多,稍有發言權的小國就紛紛在ASCII的基礎上擴展造成本身的編碼,這就是ISO-8859-*系列。很顯然ISO-8859-*系列的碼也是八位的,而且其字符集序號與存儲的編碼也徹底相同。操作系統
Unicode
爲了全世界信息的交流暢通,ISO組織制定了一套Unicode字符集方案,注意,不是編碼。並作了二次修正,如今還在不斷的發展完善中,由於總有新的文字被發現,被啓用,尤爲是中文。Unicode編碼號稱包含全世界的語言符號,所以Unicode經常做爲不一樣編碼間相互轉碼的橋樑。Unicode使用了32位二進制數據來爲字符編號(不是編碼),最大可容納2的31次方個字符,真是個天文數字。不過的確太多了,就約定一部分永遠不啓用。所以,注意了,這裏始終沒說Unicode的編碼,緣由是Unicode有多種編碼方案。
一個字符的Unicode字符編號是肯定的,可是在實際傳輸過程當中,因爲不一樣系統平臺的設計不必定一致,以及出於節省空間的目的,對Unicode編碼的方式有所不一樣。 這點與前兩種ASCII和ISO-8859-*大不相同。
Unicode的實現方式稱爲Unicode轉換格式(Unicode Translation Format,簡稱爲 UTF),分UFT-八、UTF-1六、UTF-32三種。
UTF-8: 8bit變長編碼,對於大多數經常使用字符集(ASCII中0~127字符)它只使用單字節,而對其它經常使用字符(特別是朝鮮和漢語會意文字),它使用3字節。
Unicode 的實現方式不一樣於編碼方式。
一個字符的Unicode編碼是肯定的,可是在實際傳輸過程當中,因爲不一樣系統平臺的設計不必定一致,以及出於節省空間的目的,對Unicode編碼的實現方式有所不一樣。
Unicode的實現方式稱爲Unicode轉換格式(Unicode Translation Format,簡稱爲 UTF)。設計
UTF-8: 8bit變長編碼,對於大多數經常使用字符集(ASCII中0~127字符)它只使用單字節,而對其它經常使用字符(特別是朝鮮和漢語會意文字),它使用3字節。
UTF-8是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24爲(三個字節)來編碼。UTF-8包含全世界全部國家須要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字能夠在各國支持UTF8字符集的瀏覽器上顯示。如,若是是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包code
UTF-16: 16bit編碼,是變長碼,大體至關於20位編碼,值在0到0x10FFFF之間,基本上就是unicode編碼的實現,Java語言內部就使用這種編碼,也是普通意義上的Unicode碼。
UTF-32: 他對全部的Unicode字符均不作變換,直接使用編號存儲!只是這種編碼方案太浪費存儲空間(就連1個字節就能夠搞定的英文字符,它都必須使用4個字節),於是儘管使用起來方便(不須要任何轉換),卻沒有獲得普及。orm
GB2312
GB2312字集是簡體字集,全稱爲GB2312(80)字集,共包括國標簡體漢字6763個。
BIG5
BIG5字集是臺灣繁體字集,共包括國標繁體漢字13053個。
GBK
GBK字集是簡繁字集,包括了GB字集、BIG5字集和一些符號,共包括21003個字符。GBK編碼是GB2312編碼的超集,向下徹底兼容GB2312,同時GBK收錄了Unicode基本多文種平面中的全部CJK漢字。同 GB2312同樣,GBK也支持希臘字母、日文假名字母、俄語字母等字符,但不支持韓語中的表音字符(非漢字字符)。GBK還收錄了GB2312不包含的漢字部首符號、豎排標點符號等字符。
GB18030
GB18030是國家制定的一個強制性大字集標準,全稱爲GB18030-2000,它的推出使漢字集有了一個「大一統」的標準。
GB18030編碼向下兼容GBK和GB2312,兼容的含義是不只字符兼容,並且相同字符的編碼也相同。GB18030收錄了全部Unicode3.1中的字符,包括中國少數民族字符,GBK不支持的韓文字符等等,也能夠說是世界大多民族的文字符號都被收錄在內。
GBK和GB2312都是雙字節等寬編碼,若是算上和ASCII兼容所支持的單字節,也能夠理解爲是單字節和雙字節混合的變長編碼。GB18030編碼是變長編碼,有單字節、雙字節和四字節三種方式。
GB18030的單字節編碼範圍是0x00-0x7F,徹底等同與ASCII;雙字節編碼的範圍和GBK相同,高字節是0x81-0xFE,低字節的編碼範圍是0x40-0x7E和0x80-FE;四字節編碼中第1、三字節的編碼範圍是0x81-0xFE,2、四字節是0x30-0x39。
ANSI:
使用2個字節來表明一個字符的各類漢字延伸編碼方式,稱爲ANSI編碼。
在簡體中文系統下,ANSI編碼表明GB2312編碼,在日文操做系統下,ANSI編碼表明JIS編碼。
對於這些編碼,知道就好了,不必深究,不清楚的地方能夠去基惟百科上去查找:
http://wikimediafoundation.org/wiki/Home
對於這些編碼,他們的兼容性示意圖以下:
本文出自 「熔 巖」 博客,請務必保留此出處http://lavasoft.blog.51cto.com/62575/236042