前一篇博文:ANSI是什麼編碼?中有這樣一段小故事:php
話說計算機是由美國佬搞出來的嘛,他們以爲一個字節(能夠表示256個編碼)表示英語世界裏全部的字母、數字和經常使用特殊符號已經綽綽有餘了(其實ASCII只用了前127個編碼)。後來歐洲人不幹了,法國人說:我須要在小寫字母加上變音符號(如:é),德國人說:我也要加幾個字母(Ä ä、Ö ö、Ü ü、ß)。因而,歐洲人就將ASCII沒用完的編碼(128-255)爲本身特有的符號編碼(後來稱之爲「擴展字符集」)。等到咱們中國人開始使用計算機的時候,尼瑪,256個編碼哪夠?我泱泱大中華,漢字起碼也得N多萬吧,就連小學生都得要求掌握兩三千字。國標局最後拍板:一個字節不夠,那咱們就用多個字節來爲漢字編碼吧,可是,國情那麼窮,字節那麼貴,三個字節傷不起,那就用倆字節吧,先給經常使用的幾千漢字編個碼,等之後國家強盛了人民富裕了,咱再擴展唄---因而GB2312就產生了。臺灣同胞一看,尼瑪,全是簡體字,還讓不讓咱們寫繁體字的活了,因而臺灣同胞也本身弄了個繁體字編碼---大五碼(Big-5)。...html
它基本道出了GB2312和Big5的由來。linux
1. GB2312編碼
GB2312字符集由中國國家標準總局1980年發佈,其中收錄了6763個經常使用漢字和682個其它符號(6763+682=7445),並將該字符集分爲94個區,每一個區94位,每一個位對應一個字符或零個字符(94x94=8836,8836-7745=1391說明有1391個位置是空的)。url
區號 | 內容 |
---|---|
01-09區 | 特殊符號,如:標點符號、數字序列、全角字符、日語假名、拼音音標等 |
10-15區 | 空 |
16-55區 | 一級漢字,按拼音排序 |
56-87區 | 二級漢字,按部首/筆畫排序 |
88-94區 | 空 |
若是將GB2312看作是一種「字符集」,則能夠用多種編碼方式對它進行編碼。好比「區位碼」就是對GB2312字符集最簡單的一種編碼方式,它直接使用區號和位號組成一個編碼值(例如:GB2312字符集中的第一個漢字「啊」,它的區號爲16,位號爲01,它的區位碼就是1601)。這裏GB2312 編碼列出了GB2312區位碼編碼。spa
但一般,人們所說的GB2312指的是一種編碼(而且不是指區位碼),它是指一般採用EUC方法對GB2312字符集中的「區」和「位」進行處理後的編碼。EUC方法的處理方式:區號和位號分別加上0xA0,結果分別做爲GB2312編碼的兩個字節的值(例如:「啊」字的區號和位號分別爲16和01,即十六進制0x10和0x01,分別加0xA0獲得編碼0xB0A1),這樣作是爲了兼容ASCII編碼(GB2312編碼的倆字節都大於ASCII碼的最大值)。這裏GB2312簡體中文編碼表列出了一般更經常使用的GB2312編碼。.net
有趣的是:GB2312中也收錄了英文字母和數字等符號(ASCII碼中也有這些符號),而且仍然是以倆字節編碼,因而GB2312中的英文字母和數字等就成了咱們日常所說的全角符號,而ASCII碼的符號就叫作半角符號。nuxt
關於GB2312還有另外一種聲音:誰設計的GB2312,被日笨人說是抄的,尼瑪,漢字都是我大中華的,誰抄誰啊...^_^設計
2. Big5unix
維基上說:Big5是由臺灣財團法人信息產業策進會爲五大中文套裝軟件(並所以得名Big-5)所設計的中文共通內碼,在1983年12月完成公告。那個以前尚未繁體字編碼,GB2312又不含繁體字,所以纔有了Big-5。
傳說Big5產生前,有着「中文電腦之父」之稱的朱邦復也設計了一套中文編碼,可容納50000多字(包括繁體和簡體),可是未被採納。
3. GBK
話說Unicode 1.1推出時,收錄了兩萬多箇中日韓通用字符集的漢字,同一年我國也定製了相應的GB13000,可是一直未被業界採用。而微軟利用了GB2312中未使用的編碼空間,而且收錄了GB13000中的所有字符,從而定製了GBK編碼(雖然收錄了GB13000的所有字符,可是編碼方式並不相同),而且實現於Windows95中文版中。GBK自身並不是國家標準,不過1995年由國標局等機構肯定爲「技術規範指導性文件」。
簡單地說:GBK是從GB2312擴展而來的,支持繁體,而且兼容GB2312。例如:「啊」字的GB2312編碼和GBK編碼都爲0xB0A1。
4. GB18030
GB2312和GBK都是用兩個字節來編碼的,就算用完全部的位(256*256=65536)也不夠爲全部的漢字編碼。因而就有了目前最新的GB18030,它採用相似UTF-8的編碼方式進行編碼(每一個字符的編碼能夠是一、2或4個字節),擁有上百萬個編碼空間,足以支持中日韓三國全部漢字,而且還能夠支持國內少數民族的文字。
5. CJK
百度裏輸入CJK,即時搜索提示的第一項竟然是「蒼井空」!!!
好吧,它並非一種編碼方式,而是中日韓統一表意文字(CJK Unified Ideographs)。在Unicode中,收集各國相同的漢字,而且進行合併相同的編碼點(code point)上,能夠避免相同文字重複編碼,浪費編碼空間。
參考: