1. 程式人生 > >刨根究底字元編碼之——簡體漢字編碼方案(GB2312、GBK、GB18030、GB13000)以及全形、半形、CJK

刨根究底字元編碼之——簡體漢字編碼方案(GB2312、GBK、GB18030、GB13000)以及全形、半形、CJK

一、概述

1.

英文字母再加一些其他標點字元之類的也不會超過256個,用一個位元組來表示一個字元就足夠了(2^8 = 256)。但其他一些文字不止這麼多字元,比如中文中的漢字就多達10多萬個,一個位元組只能表示256個字元,肯定是不夠的,因此只能使用多個位元組來表示一個字元。

於是當計算機被引入到中國後,相關部門設計了GB系列編碼(“GB”為“國標”的漢語拼音首字母縮寫,即“國家標準”之意)。

按照GB系列編碼,在一段文字中,如果一個位元組是0~127,那麼這個位元組的含義同ASCII編碼,否則,這個位元組和下一個位元組共同組成漢字(或是GB編碼定義的其他字元)。

因此,GB系列編碼向下相容ASCII,也就是說,如果一段用GB編碼文本里的所有字元都在ASCII中有定義(即該文字全部由ASCII字元組成),那麼這段編碼和ASCII編碼完全一樣。

2.

GB編碼早期收錄的漢字不足一萬個,基本能滿足日常使用需求,但不包含一些生僻字,因此後來又進行了擴充套件。

最早的GB編碼是GB2312,後來有了在GB2312基礎上擴充套件的GBK,最新的是GB18030,加入了一些國內少數民族的文字,一些生僻字被編到了4個位元組,每擴充套件一次都完全保留之前版本的編碼,所以每個新版本都向下相容。

這裡要指出的是,雖然都用多個位元組表示一個字元,但是GB類的漢字編碼與後文的Unicode編碼方案UTF-8、UTF-16、UTF-32是毫無關係的(其中UTF-8對於ASCII字元仍用一個位元組編碼,而非ASCII字元則為多位元組編碼)。

3.

不過,也正因為不得不使用多個位元組來表示一個字元,相較於只使用單個位元組的ASCII編碼方案,GB類編碼方案與後面要介紹的Unicode編碼方案一樣,無疑到導致了更高的複雜度。

比如,當多位元組字元與原先的ASCII字元混用時:

1)要麼將原先的ASCII字元重新編碼為多個位元組表示,以便與其他多位元組字元統一起來(UTF-16、UTF-32等採用的是這種方法);

2)要麼保持ASCII字元為單個位元組編碼不變,但將其他多位元組字元編碼中的各個位元組的最高位(首位)設為1,以避免與位元組最高位為0的ASCII編碼相沖突(GB、UTF-8等採用的是這種方法)。

前者具有更高的空間複雜度,因為原先只需要單個位元組表示的ASCII字元,現在也必須用多個位元組來表示,顯然更為耗費儲存空間;後者則具有更高的時間複雜度,因為為了避免衝突以及其他種種考慮(比如擴充套件性、容錯性等),使用了更為複雜的編碼演算法(encodingalgorithm),無疑更為耗費計算時間。

而且,無論是前者還是後者,若多位元組編碼中採用的又是多位元組碼元(Code Unit)的話(如UTF-16、UTF-32編碼採用的就是多位元組碼元,而UTF-8中的非ASCII字元雖然也是多位元組編碼,但採用的卻是單位元組碼元),由於歷史的原因,又進一步引發了更為麻煩的位元組序(Byte-Order)問題。(編碼演算法、碼元、位元組序的相關介紹,詳見後文解釋)

二、GB2312

1.

GB2312編碼方案,即《資訊交換用漢字編碼字符集——基本集》,是由中國國家標準總局於1980年釋出、1981年5月1日開始實施的一套國家標準,標準號為GB2312-1980。

GB2312編碼適用於漢字處理、漢字通訊等系統之間的資訊交換,通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎所有的中文系統和國際化的軟體都支援GB2312。

2.

GB2312編碼為了避免與ASCII字元編碼(0~127)相沖突,規定表示一個漢字的編碼(即漢字內碼)的位元組其值必須大於127(即位元組的最高位為1),並且必須是兩個大於127的位元組連在一起來共同表示一個漢字(GB2312為雙位元組編碼),前一位元組稱為高位元組,後一位元組稱為低位元組;而一個位元組的值若小於127(即位元組的最高位為0),自然是仍表示一個原來的ASCII字元(ASCII為單位元組編碼)。

因此,可以認為GB2312是對ASCII的中文擴充套件(即GB2312與ASCII相相容),正如EASCII是對ASCII的歐洲文字擴充套件一樣。

不過,很顯然的是,GB2312與EASCII碼的128~255這段擴充套件部分所表示的字元是不同的。也就是說,GB2312與EASCII雖然都相容ASCII,但GB2312並不相容EASCII的擴充套件部分。

事實上,目前世界上除ASCII之外的其它通行的字元編碼方案,基本上都相容ASCII,但相互之間並不相容。

(笨笨阿林原創文章,轉載請註明出處)

3.

GB 2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時,除了漢字,GB

2312還收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西裡爾字母在內的682個字元。

可能是出於顯示上視覺美觀的考慮,除漢字之外的682個字元中,甚至包括了ASCII裡本來就有的數字、標點、字母等字元。也就是說,這些ASCII裡原來就有的單位元組編碼的字元,又再編了兩個位元組長的GB2312編碼版本。這682個字元就是常說的“全形”字元,而這682個字元中所對應的ASCII字元就被稱之為“半形”字元。

【附:全形、半形

全形字元是中文顯示及雙位元組中文編碼的歷史遺留問題。

早期的點陣顯示器上由於畫素有限,原先ASCII西文字元的顯示寬度(比如8畫素的寬度)用來顯示漢字有些捉襟見肘(實際上早期的針式印表機在列印輸出時也存在這個問題),因此就採用了兩倍於ASCII字元的顯示寬度(比如16畫素的寬度)來顯示漢字。

這樣一來,ASCII西文字元在顯示時其寬度為漢字的一半。或許是為了在西文字元與漢字混合排版時,讓西文字元能與漢字對齊等視覺美觀上的考慮,於是就設計了讓西文字母、數字和標點等特殊字元在外觀視覺上也佔用一個漢字的視覺空間(主要是寬度),並且在內部儲存上也同漢字一樣使用2個位元組進行儲存的方案。這些與漢字在顯示寬度上一樣的字元就被稱之為全形字元。

而原來ASCII中的西文字元由於在外觀視覺上僅佔用半個漢字的視覺空間(主要是寬度),並且在內部儲存上使用1個位元組進行儲存,相對於全形字元,因而被稱之為半形字元。

後來,其中的一些全形字元因為比較有用,就得到了廣泛應用(比如全形的逗號“,”、問號“?”、感嘆號“!”、空格“ ”等,這些字元在輸入法中文輸入狀態下的半形與全形是一樣的,英文輸入狀態下全形跟中文輸入狀態一樣,但半形大約為全形的二分之一寬),專用於中日韓文字,成為了標準的中日韓標點字元。而其它的許多全形字元則逐漸失去了價值(現在很少需要讓純文字的中文和西文字字對齊了),就很少再用了。

現在全球字元編碼的事實標準是Unicode字符集及基於此的UTF-8UTF-16等編碼實現方式。Unicode吸納了許多遺留(legacy)編碼,並且為了相容性而保留了所有字元。因此中文編碼方案中的這些全形字元也保留下來了,而國家標準也仍要求字型和軟體都支援這些全形字元。

不過,半形和全形字元的關係在UTF-8UTF-16等中不再是簡單的1位元組和2位元組的關係了。具體參見後文。

——綜合了知乎《中文輸入法為什麼會有全形和半形的區別?》下多位答主的回答,有多處修改】

GB2312編碼表的開始部分 

三、GB13000

1.

為了便於多個文種的同時處理,國際標準化組織下屬編碼字符集工作組制定了新的編碼字符集標準——ISO/IEC 10646(與統一聯盟制定的Unicode標準相容,兩者的關係詳見後文)。

該標準第一次頒佈是在1993年,當時只頒佈了其第一部分,即ISO/IEC 10646.1:1993,收錄中國大陸、臺灣、日本及韓國通用字符集的漢字,總共20,902個。制定這個標準的目的是對世界上的所有字元統一編碼,以實現世界上所有字元在計算機上的統一處理。

2.

中國相應的國家標準是GB13000.1-1993《資訊科技通用多八位編碼字符集(UCS)第一部分:體系結構與基本多文種平面》。

2010年又釋出了替代標準——GB13000-2010《資訊科技通用多八位編碼字符集(UCS)》,此標準等同於國際標準ISO/IEC 10646:2003《資訊科技通用多八位編碼字符集(UCS)》。

GB13000與國際標準ISO/IEC10646及Unicode標準目前在基本平面(即BMP,詳見後文)上保持一致。

四、GBK

1、

GB2312-1980共收錄6763個漢字,覆蓋了中國大陸99.75%的使用頻率,基本滿足了漢字的計算機處理需要。但對於人名、古漢語等方面出現的罕用字、生僻字,GB2312不能處理,如部分在GB2312-1980推出以後才簡化的漢字(如“囉”)、部分人名用字(如前總理朱鎔基的“鎔”字)、臺灣及香港使用的繁體字、日語及朝鮮語漢字等,並未收錄在內。

於是利用GB2312-1980未使用的碼點空間,收錄GB13000.1-1993的全部字元,於1995年又釋出了《漢字內碼擴充套件規範(GBK)》(Guo-Biao Kuozhan國家標準擴充套件碼,是根據GB13000.1-1993,對GB2312-1980的擴充套件;英文全稱Chinese Internal Code Specification)。

2.

不過,雖然GBK收錄了GB13000.1-1993的全部字元,但編碼方式並不相同。

GBK跟GB2312一樣是雙位元組編碼,然而,GBK只要求第一個位元組即高位元組是大於127就固定表示這是一個漢字的開始(0~127當然表示的還是ASCII字元),不再要求第二個位元組即低位元組也必須是127號之後的編碼。這樣,作為同樣是雙位元組編碼的GBK才可以收錄比GB2312更多字元。

GBK字符集向後完全相容GB2312,還支援GB2312-1980不支援的部分中文簡體、中文繁體、日文假名,還包括希臘字母以及俄語字母等字母(不過這個編碼不支援韓國文字,也是其在實際使用中與Unicode編碼相比欠缺的部分),共收錄漢字21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一體。

GBK 的編碼框架(CodeScheme) :其中GBK1 收錄除GB2312 符號外的增補符號,GBK2 收錄GB2312 漢字,GBK3 收錄CJK 漢字,GBK4 收錄CJK 漢字和增補漢字,GBK5 為非中文字符集,UDC 為使用者自定義字元區 

3.

微軟早在Windows 95簡體中文版中就採用了GBK編碼,也就是對微軟內部之前的CP936字碼表(Code Page 936)進行了擴充套件(之前CP936和GB2312-1980一模一樣)。

微軟的CP936通常被視為等同於GBK,連IANA(Internet Assigned Numbers Authority網際網路號碼分配局)也以“CP936”為“GBK”之別名。

但事實上比較起來,GBK定義之字元較CP936多出95個(15個非漢字及80個漢字),皆為當時未收入ISO 10646 / Unicode的符號。

【注:有說是微軟在GB2312的基礎上擴充套件制訂了GBK,然後GBK才成為“國家標準”(也有說GBK不是國家標準,只是“技術規範指導性檔案”);但網上也有資料說是先有GBK(由全國資訊科技標準化技術委員會於1995年12月1日製定),然後微軟才在其內部所用的CP936內碼表中以GBK為參考進行了擴充套件。】

五、GB18030

1.

中國國家質量技術監督局於2000年3月17日推出了GB18030-2000標準,以取代GBK。GB18030-2000除保留全部GBK編碼漢字之外,在第二位元組再度進行擴充套件,增加了大約一百個漢字及四位元組編碼空間。

GB18030《資訊交換用漢字編碼字符集基本集的補充》是我國繼GB2312-1980和GB13000-1993之後最重要的漢字編碼標準,是我國計算機系統必須遵循的基礎性標準之一。

2.

2005年,GB18030編碼方案又進行了擴充,於是又有了GB18030-2005《資訊科技中文編碼字符集》。如前所述,GB18030-2000是GBK的取代版本,它的主要特點是在GBK基礎上增加了CJK中日韓統一表意文字擴充A的漢字;而GB18030-2005的主要特點是在GB18030-2000基礎上又增加了CJK中日韓統一表意文字擴充B的漢字。

微軟也為GB18030定義了內碼表(Codepage):CP54936,但是這個內碼表實際上並沒有真正使用(在Windows 7的“控制面板”-“區域和語言”-“管理”-“非Unicode程式的語言”中沒有提供選項;在Windows cmd命令列中可通過命令chcp 54936更改,之後在cmd可顯示中文,但卻不支援中文輸入)。

  • 各漢字( 中文字元) 編碼方案之間的關係(Big5為繁體漢字編碼方案,主要通行於臺港地區,本文不作詳細介紹) 

    六、CJK中日韓統一表意文字

    1.

    CJK指的是中日韓統一表意文字(CJK

    Unified Ideographs),也稱統一漢字(Unihan),目的是要把分別來自中文(包含壯文)、日文、韓文、越文中,起源相同、本義相同、形狀一樣或稍異的表意文字在Unicode標準及ISO/IEC 10646標準內賦予相同的碼點值。(Unicode標準及ISO/IEC 10646標準後文有詳細解釋)

    CJK是中文(Chinese)、日文(Japanese)、韓文(Korean)三國文字英文首字母的縮寫。顧名思義,它能夠支援這三種文字,但實際上,CJK能夠支援包括中文(包含壯文)、日文、韓文、越文在內的多種亞洲雙位元組文字。

    2.

    所謂“起源相同、本義相同、形狀一樣或稍異的表意文字”,主要為漢字,包括繁體字、簡體字;但也有仿漢字,包括方塊壯字、日本漢字(漢字/かんじ)、韓國漢字(漢字/한자)、越南的喃字(

  • 以上是刨根究底字元編碼之五——簡體漢字編碼方案(GB2312、GBK、GB18030、GB13000)以及全形、半形、CJK的內容,更多 全形刨根究底 編碼 漢字 半形 字元 簡體 以及 GB13000 GB18030 的內容,請您使用右上方搜尋功能獲取相關資訊。

 

原文連結:https://www.aliyun.com/jiaocheng/14725.html?spm=5176.100033.1.16.16d24e82nGtZzt