汉字编码方案介绍
當我們使用Windows記事本的“另存為”,可以在GBK、Unicode、Unicode big endian和UTF-‐8 這幾種編碼方式間相互轉換。同樣是txt 文件,Windows 是怎樣識別編碼方式的呢?同樣一份txt文件,Unicode、Unicode big endian和UTF-‐8 編碼的txt文件的大小都不一樣,二進制文件開頭會多出幾個字節,分別是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-‐8)。但這些標記是基于什么標準呢?
本文主要介紹一下目前常用的漢字編碼方案,從而使讀者看完后能對于漢字編碼有基本的認識。
GB2312 字符集
GB2312是1980年國家制定的漢字內碼規范。GB是國標的漢語拼音首字母。該字符集收錄了收入漢字6763 個,符號715 個,總計7478 個字符,通常所說的一、二級漢字庫就全部包含在GB2312 中。楷體-‐GB2312、仿宋-‐GB2312、華文行楷等市面上絕大多數字體支持顯示這個字符集,亦是大多數輸入法所采用的字符集。
GB2312 將收錄的漢字分成兩級:第一級是常用漢字計3755 個,置于16-55區,按漢語拼音字母/筆形順序排列;第二級漢字是次常用漢字計3008 個,置于56-87 區,按部首/筆畫順序排列。故而GB2312 最多能表示6763 個漢字。
雖然GB2312 包含了絕大部分的常用簡體漢字,但是由于中文的復雜性,所以GB2312 目前已經越來越不能適應需要了,特別是因為人名、地名中包含的很多字GB2312 中都沒有,如‘镕’字,GB2312 中就沒有包含,這樣導致很多混亂。
Big5 字符集
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 個。
GBK 字符集
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 簡繁體漢字。
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 就可以了.
總結
- 上一篇: win7下通过easyBCD引导安装Ub
- 下一篇: MapReduce编程概述