汉字编码方案演变
在Unicode之前,一共存在過(guò)3套中文編碼標(biāo)準(zhǔn):GB2312-80, Big5,HKSCS.
GB2312-80
GB2312-80,是中國(guó)大陸使用的國(guó)家標(biāo)準(zhǔn),其中一共編碼了6763個(gè)常用簡(jiǎn)體漢字。
GB2312即《信息交換用漢字編碼字符集———基本集》,由國(guó)家標(biāo)準(zhǔn)總局發(fā)布,1981 年 5月 1日實(shí)施. 它 對(duì)促進(jìn)漢字信息技術(shù)的發(fā)展和計(jì)算機(jī)的應(yīng)用,發(fā)揮了重要作用,有人稱(chēng)它是漢字編碼的“秦始皇”.幾乎所有的中文系統(tǒng)和國(guó)際化的軟件都支持GB2312.
GB2312收錄圖形字符7445個(gè),包括阿拉伯和羅馬數(shù)字,拉丁字母,日文假名,希臘字母,俄文字母,漢 語(yǔ)拼音符號(hào)和注音字母,其中簡(jiǎn)體漢字 6763 個(gè),以頻度的高低、構(gòu)詞能力的強(qiáng)弱、實(shí)際用處的大小為原則進(jìn)行選字,分成兩級(jí):
- 一級(jí)漢字3755 個(gè),按拼音排序;
- 二級(jí)漢字3008個(gè),按部首、筆畫(huà)排序.
一、二級(jí)漢字約占近代文獻(xiàn)漢字累計(jì)使用頻度99. 75%以上. GB2312是二字節(jié)編碼. 它將代碼表分為94 個(gè)區(qū),區(qū)號(hào)對(duì)應(yīng)第一字節(jié); 每個(gè)區(qū) 94 個(gè)位,位號(hào)對(duì)應(yīng)第二字節(jié). 為了兼容ASCII 碼,將區(qū)號(hào)和位號(hào)組成的兩個(gè)字節(jié)的值分別加 0x20( 0x20 以下為控制符) ,再將最高 位分別置 1,以示區(qū)別. GB2312 的編碼范圍為 0xA1A1-0xFEFE.
例: “啊”字是GB2312之中的第一個(gè)漢字,排在16區(qū)1位,它的編碼為 0xB0A1.
Big5
Big5,是中國(guó)臺(tái)灣使用的編碼標(biāo)準(zhǔn),編碼了臺(tái)灣使用的繁體漢字,大概有8千多個(gè)。
Big5 中文名“大五碼”,是繁體字常用的字符集,共收入13060 個(gè)繁體漢字,808 個(gè)符號(hào),總計(jì)13868 個(gè)字符,普遍使用于臺(tái)灣、香港等地區(qū)。臺(tái)灣教育部標(biāo)準(zhǔn)宋體楷體等港臺(tái)大多數(shù)字體支持這個(gè)字符集的顯示。
1983 年10 月,臺(tái)灣國(guó)家科學(xué)委員會(huì)、教育部國(guó)語(yǔ)推行委員會(huì)、中央標(biāo)準(zhǔn)局、行政院共同制定了《通用漢字標(biāo)準(zhǔn)交換碼》,后經(jīng)修訂于1992 年5 月公布,更名為《中文標(biāo)準(zhǔn)交換碼》,BIG5 是臺(tái)灣資訊工業(yè)策進(jìn)會(huì)根據(jù)以上標(biāo)準(zhǔn)制定的編碼方案。雖然Big5 存在一些瑕疵,但廣泛應(yīng)用于電腦行業(yè),尤其是
互聯(lián)網(wǎng)中,從而成為一種事實(shí)上的行業(yè)標(biāo)準(zhǔn)。
BIG5 碼是雙字節(jié)編碼方案,其中第一個(gè)字節(jié)的值在OXAO-OXFE 之間,第二個(gè)字節(jié)在OX40-OX7E 和OXA1-OXFE 之間。BIG5 收錄13461 個(gè)漢字和符號(hào),包括:
- 符號(hào)408 個(gè),編碼位置A140-A3BE
- 常用字5401 個(gè),編碼位置A440-C67E,包括臺(tái)灣教育部頒布的《常用國(guó)字標(biāo)準(zhǔn)字體表》的全部漢字4808 個(gè),臺(tái)灣教科書(shū)常用字587 個(gè),異體字6 個(gè)。
- 次常用字7652 個(gè),編碼位置C940-F9D5,包括臺(tái)灣教育部頒布的《次常用國(guó)字標(biāo)準(zhǔn)字體表》的全部漢字6341個(gè),《罕用國(guó)字標(biāo)準(zhǔn)字體表》中使用頻率較高的字1311 個(gè)。
HKSCS
HKSCS,是中國(guó)香港使用的編碼標(biāo)準(zhǔn),字體也是繁體,但跟Big5有所不同。
這3套編碼標(biāo)準(zhǔn)都采用了兩個(gè)擴(kuò)展ASCII的方法,因此,幾套編碼互不兼容,而且編碼區(qū)間也各有不同。因?yàn)槠洳患嫒菪?#xff0c;在同一個(gè)系統(tǒng)中同時(shí)顯示GB和Big5基本上是不可能的。當(dāng)時(shí)的南極星、RichWin等等軟件,在自動(dòng)識(shí)別中文編碼、自動(dòng)顯示正確編碼方面都做了很多努力 。他們用了怎樣的技術(shù)我就不得而知了,我知道好像南極星曾經(jīng)以同屏顯示繁簡(jiǎn)中文為賣(mài)點(diǎn)。
后來(lái),由于各方面的原因,國(guó)際上又制定了針對(duì)中文的統(tǒng)一字符集GBK和GB18030,其中:
GBK
GBK已經(jīng)在Windows、Linux等多種操作系統(tǒng)中實(shí)現(xiàn)。GBK兼容GB2312,并增加了大量不常用漢字,還加入了幾乎所有的Big5中的繁體漢字。但是GBK中的繁體漢字和Big5中的幾乎不兼容。
GB2312-80 僅收漢字6763 個(gè),這大大少于現(xiàn)有漢字,隨著時(shí)間推移及漢字文化的不斷延伸推廣,有些原來(lái)很少用的字,現(xiàn)在變成了常用字。因此全國(guó)信息技術(shù)化技術(shù)委員會(huì)于1995 年12 月1 日《漢字內(nèi)碼擴(kuò)展規(guī)范》。GBK 向下與GB2312完全兼容,包含Big-‐5 的繁體字(但是不兼容Big-‐5 字符集編碼)。
GBK 共收入21886 個(gè)漢字和圖形符號(hào),包括:
- GB2312 中的全部漢字、非漢字符號(hào)。
- BIG5 中的全部漢字。
- 與ISO-10646 相應(yīng)的國(guó)家標(biāo)準(zhǔn)GB13000 中的其它CJK 漢字
- (以上合計(jì)20902 個(gè)漢字)
- 其它漢字、部首、符號(hào),共計(jì)984 個(gè)。
微軟公司自Windows95 簡(jiǎn)體中文版開(kāi)始支持GBK 代碼,但目前的多數(shù)搜索引擎都不能很好地支持GBK漢字。宋體、隸書(shū)、黑體、幼圓、華文中宋、華文細(xì)黑、華文楷體、標(biāo)楷體(DFKai--‐SB)、Arial Unicode MS、MingLiU、PMingLiU 等字體支持顯示這個(gè)字符集。微軟拼音輸入法2003、全拼、紫光拼音等輸入法,能夠錄入GBK 簡(jiǎn)繁體漢字。
GB18030相當(dāng)于是GBK的超集,比GBK包含的字符更多。據(jù)我所知目前還沒(méi)有操作系統(tǒng)直接支持GB18030。
Unicode
很多傳統(tǒng)的編碼方式都有一個(gè)共同的問(wèn)題,即容許電腦處理雙語(yǔ)環(huán)境(通常使用拉丁字母以及其本地語(yǔ)言),但卻無(wú)法同時(shí)支持多語(yǔ)言環(huán)境。例如ISO8859 所定義的字符雖然在不同的國(guó)家中廣泛地使用,可是在不同國(guó)家間卻經(jīng)常出現(xiàn)不兼容的情況。因此產(chǎn)生了Unicode,它是由國(guó)際組織設(shè)計(jì),可以容納全世界所有語(yǔ)言文字的編碼方案。Unicode的學(xué)名“Universal Multiple‐Octet Coded Character Set”,簡(jiǎn)稱(chēng)為UCS。UCS 可以看作是”Unicode Character Set”的縮寫(xiě)。歷史上存在兩個(gè)試圖獨(dú)立設(shè)計(jì)Unicode的組織,即國(guó)際標(biāo)準(zhǔn)化組織(ISO)和一個(gè)軟件制造商的協(xié)會(huì)(unicode.org)。
ISO 開(kāi)發(fā)了ISO 10646 項(xiàng)目,Unicode 協(xié)會(huì)開(kāi)發(fā)了Unicode 項(xiàng)目。在1991 年前后,雙方都認(rèn)識(shí)到世界不需要兩個(gè)不兼容的字符集。于是它們開(kāi)始合并雙方的工作成果,并為創(chuàng)立一個(gè)單一編碼表而協(xié)同工作。從Unicode2.0 開(kāi)始,Unicode 項(xiàng)目采用了與ISO 10646-‐1 相同的字庫(kù)和字碼。目前兩個(gè)項(xiàng)目仍都存在,并獨(dú)立地公布各自的標(biāo)準(zhǔn)。Unicode 協(xié)會(huì)現(xiàn)在的最新版本是2005 年的Unicode 4.1.0。ISO 的最新標(biāo)準(zhǔn)是ISO 10646-‐3:2003。
UTF-‐8、UTF-‐16 等編碼方式
UCS只是規(guī)定如何編碼,并沒(méi)有規(guī)定如何傳輸、保存這個(gè)編碼。例如“漢”字的UCS 編碼是6C49,我可以用4 個(gè)ascii 數(shù)字來(lái)傳輸、保存這個(gè)編碼;也可以用utf-‐8 編碼:3 個(gè)連續(xù)的字節(jié)E6 B1 89 來(lái)表示它。關(guān)鍵在于通信雙方都要認(rèn)可。UTF-‐8、UTF-‐7、UTF-‐16 都是被廣泛接受的方案。UTF-‐8 的一個(gè)特別的好處是它與ISO-‐8859-‐1 完全兼容。UTF 是“UCS Transformation Format”的縮寫(xiě)。
簡(jiǎn)單來(lái)說(shuō),unicode,gbk 和大五碼就是編碼的值,而utf-‐8,uft-‐16 之類(lèi)就是這個(gè)值的表現(xiàn)形式.而前面那三種編碼是一兼容的,同一個(gè)漢字,那三個(gè)碼值是完全不一樣的.如"漢"的uncode 值與gbk 就是不一樣的,假設(shè)uncode 為a040,gbk 為b030,而uft-‐8 碼,就是把那個(gè)值表現(xiàn)的形式.utf-‐8 碼完全只針對(duì)uncode 來(lái)組織的,如果GBK 要轉(zhuǎn)UTF-8 必須先轉(zhuǎn)uncode 碼,再轉(zhuǎn)utf--‐8 就可以了.
參考:[1] https://blog.csdn.net/u013894429/article/details/53635264
[2] https://blog.csdn.net/linkedin_21614133/article/details/45309705
[3] 淺說(shuō)漢字編碼. 袁徑三
總結(jié)
- 上一篇: 三元运算符多重判断
- 下一篇: Robocup 2D仿真足球机器人环境搭