1. 程式人生 > >各種編碼的對比

各種編碼的對比

早期的計算機使用7位的ASCII編碼,為了處理漢字,程式設計師設計了用於簡體中文的GB2312和用於繁體中文的big5。 
GB2312(1980年):16位字符集,收錄有6763個簡體漢字,682個符號,共7445個字元; 
優點:適用於簡體中文環境,屬於中國國家標準,通行於大陸,新加坡等地也使用此編碼; 
缺點:不相容繁體中文,其漢字集合過少。 
GBK(1995年):16位字符集,收錄有21003個漢字,883個符號,共21886個字元; 
優點:適用於簡繁中文共存的環境,為簡體Windows所使用(內碼表cp936),向下完全相容gb2312,向上支援 ISO-10646 國際標準 ;所有字元


都可以一對一對映到unicode2.0上;
缺點:不屬於官方標準,和big5之間需要轉換;很多搜尋引擎都不能很好地支援GBK漢字。
GB18030(2000年):32位字符集;收錄了27484個漢字,同時收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。 
優點:可以收錄所有你能想到的文字和符號,屬於中國最新的國家標準; 
缺點:目前支援它的軟體較少。


補充:
現在的PC平臺必須支援GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支援GB2312。
從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的標準支援更多的字元。


在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為0。GB2312、GBK到GB18030都屬於雙位元組字符集 (DBCS)



GB18030是中國所有非手持/嵌入式計算機系統的強制實施標準。


1 GB2312-80
GB 2312 或 GB 2312-80 是中國國家標準簡體中文字符集,全稱《資訊交換用漢字編碼字符集·基本集》,又稱GB0,由中國國家標準總局釋出


,1981年5月1日實施。GB2312編碼通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎所有的中文系統和國際化的軟體都支援GB 2312。


GB 2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄


語西裡爾字母在內的682個字元。
GB 2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。
對於人名、古漢語等方面出現的罕用字,GB 2312不能處理,這導致了後來GBK及GB 18030漢字字符集的出現。


GB2312對任意一個圖形字元都採用兩個位元組表示,並對所收漢字進行了“分割槽”處理,每區含有94個漢字/符號,分別對應第一位元組和第二位元組


。這種表示方式也稱為區位碼。
01-09區為特殊符號。
16-55區為一級漢字,按拼音排序。
56-87區為二級漢字,按部首/筆畫排序。
10-15區及88-94區則未有編碼。
GB2312的編碼範圍為2121H-777EH,與ASCII有重疊,通行方法是將GB碼兩個位元組的最高位置1以示區別。


2 GBK
GBK即漢字內碼擴充套件規範,K為漢語拼音 Kuo Zhan(擴充套件)中“擴”字的聲母。英文全稱Chinese Internal Code Specification。


GBK共收入21886個漢字和圖形符號,包括:
GB2312中的全部漢字、非漢字元號。
BIG5中的全部漢字。
與ISO 10646相應的國家標準GB13000中的其它CJK漢字,以上合計20902個漢字。
其它漢字、部首、符號,共計984個。
GBK向下與GB2312 完全相容,向上支援ISO 10646國際標準,在前者向後者過渡過程中起到的承上啟下的作用。


GBK 採用雙位元組表示,總體編碼範圍為8140-FEFE之間,首位元組在81-FE之間,尾位元組在40-FE之間,剔除XX7F一條線。GBK編碼區分三部分:
漢字區 包括
GBK/2:OXBOA1-F7FE, 收錄GB2312漢字6763個,按原序排列;
GBK/3:OX8140-AOFE,收錄CJK漢字6080個;
GBK/4:OXAA40-FEAO,收錄CJK漢字和增補的漢字8160個。
圖形符號區 包括
GBK/1:OXA1A1-A9FE,除GB2312的符號外,還增補了其它符號
GBK/5:OXA840-A9AO,擴除非漢字區。
使用者自定義區
GBK區域中的空白區,使用者可以自己定義字元。


3 GB18030
GB 18030,全稱:國家標準GB 18030-2005《資訊科技中文編碼字符集》,是中華人民共和國現時最新的內碼字集,是GB 18030-2000《資訊科技


資訊交換用漢字編碼字符集基本集的擴充》的修訂版。
GB 18030與GB 2312-1980完全相容,與GBK基本相容,支援GB 13000及Unicode的全部統一漢字,共收錄漢字70244個。
與 UTF-8 相同,採用多位元組編碼,每個字可以由1個、2個或4個位元組組成。
編碼空間龐大,最多可定義161萬個字元。
支援中國國內少數民族的文字,不需要動用造字區。
漢字收錄範圍包含繁體漢字以及日韓漢字
GB18030 編碼是一二四位元組變長編碼。
單位元組,其值從0到0x7F,與 ASCII 編碼相容。
雙位元組,第一個位元組的值從0x81到0xFE,第二個位元組的值從0x40到0xFE(不包括0x7F),與 GBK標準基本相容。
四位元組,第一個位元組的值從0x81到0xFE,第二個位元組的值從0x30到0x39,第三個位元組從0x81到0xFE,第四個位元組從0x30到0x39。










UTF-8:Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字元的一種多位元組編碼,它對英文使用8位(即


一個位元組),中文使用24為(三個位元組)來編碼。UTF-8包含全世界所有國家需要用到的字元,是國際編碼,通用性強。UTF-8編碼的文字可以在


各國支援UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支援包。


GBK是國家標準GB2312基礎上擴容後相容GB2312的標準。GBK的文字編碼是用雙位元組來表示的,即不論中、英文字元均使用雙位元組來表示,為了區


分中文,將其最高位都設定成1。GBK包含全部中文字元,是國家編碼,通用性比UTF8差,不過UTF8佔用的資料庫比GBD大。


GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換:


GBK、GB2312--Unicode--UTF8


UTF8--Unicode--GBK、GB2312


對於一個網站、論壇來說,如果英文字元較多,則建議使用UTF-8節省空間。不過現在很多論壇的外掛一般只支援GBK。




GB2312是GBK的子集,GBK是GB18030的子集 
GBK是包括中日韓字元的大字元集合 
如果是中文的網站 推薦GB2312 GBK有時還是有點問題 
為了避免所有亂碼問題,應該採用UTF-8,將來要支援國際化也非常方便 
UTF-8可以看作是大字符集,它包含了大部分文字的編碼。 
使用UTF-8的一個好處是其他地區的使用者(如香港臺灣)無需安裝簡體中文支援就能正常觀看你的文字而不會出現亂碼。




gb2312是簡體中文的碼
gbk支援簡體中文及繁體中文
big5支援繁體中文

utf-8支援幾乎所有字元

如果要了解編碼空間可以看這篇文章:

http://www.jb51.net/article/17968.htm

GBK 漢字內碼擴充套件規範編碼表

http://ff.163.com/newflyff/gbk-list/