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