漢字內碼擴展規範

維基百科,自由的百科全書
前往: 導覽搜尋

漢字內碼擴展規範,稱GBK,全名為《漢字內碼擴展規範(GBK)》1.0版,由中華人民共和國全國信息技術標準化技術委員會1995年12月1日制訂,國家技術監督局標準化司和電子工業部科技與質量監督司1995年12月15日聯合以《技術標函[1995]229號》文件的形式公布。 GBK共收錄21886個漢字和圖形符號,其中漢字(包括部首和構件)21003個,圖形符號883個。

GBK的K為漢語拼音Kuo Zhan(擴展)中「擴」字的聲母。英文全稱Chinese Internal Code Extension Specification。

GBK 只為「技術規範指導性文件」,不屬於國家標準。國家質量技術監督局於2000年3月17日推出了GB 18030-2000標準,以取代GBK。GB 18030-2000除保留全部GBK編碼漢字,在第二字節把能使用範圍再度進行擴展,增加了大約一百個漢字及四位元組編碼空間,但是將GBK作為子集全部保留。請參看GB 18030

歷史[編輯]

1993年,Unicode 1.1版本推出,收錄中國大陸台灣日本韓國通用字符集漢字,總共有20,902個。中國大陸訂定了等同於Unicode 1.1版本的「GB 13000.1-93」「信息技術通用多八位編碼字符集(UCS)第一部分:體系結構與基本多文種平面」。

由於GB 2312-80只收錄6763個漢字,有不少漢字,如部分在GB 2312-80推出以後才簡化的漢字(如「啰」),部分人名用字(如中國前總理朱鎔基的「镕」字),台灣及香港使用的繁體字日語朝鮮語漢字等,並未有收錄在內。於是廠商微軟利用GB 2312-80未使用的編碼空間,收錄GB 13000.1-93全部字符制定了GBK編碼。

根據微軟資料,GBK是對GB2312-80的擴展,也就是CP936字碼表(Code Page 936)的擴展(之前CP936和GB 2312-80一模一樣),最早實現於Windows 95簡體中文版。雖然GBK收錄GB 13000.1-93的全部字符,但GBK是一種編碼方式並向下兼容GB2312;而GB 13000.1-93等同於Unicode 1.1是一種字符集,它的幾種編碼方式如UTF8UTF16LE等,與GBK完全不兼容。

編碼方式[編輯]

字符有一字節和雙字節編碼,007F範圍內是第一個字節,和ASCII保持一致,此範圍內嚴格上說有96個文字和32個控制符號。

之後的雙字節中,前一字節是雙字節的第一位。總體上說第一字節的範圍是81FE(也就是不含80FF),第二字節的一部分領域在407E,其他領域在80FE

具體來說,定義的是下列字節:

GBK的編碼範圍
範圍 第1位元組 第2位元組 編碼數 字數
水準GBK/1 A1A9 A1FE 846 717
水準GBK/2 B0F7 A1FE 6,768 6,763
水準GBK/3 81A0 40FE (7F除外) 6,080 6,080
水準GBK/4 AAFE 40A0 (7F除外) 8,160 8,160
水準GBK/5 A8A9 40A0 (7F除外) 192 166
用戶定義 AAAF A1FE 564
用戶定義 F8FE A1FE 658
用戶定義 A1A7 40A0 (7F除外) 672
合計: 23,940 21,886

雙字節符號可以表達的64K空間如下圖所示。綠色和黃色區域是GBK的編碼,紅色是用戶定義區域。沒有顏色區域是不正確的代碼組合。

GBK encoding zh.svg

與其他編碼的關係[編輯]

GBK向下完全兼容GB2312-80編碼。支持GB2312-80編碼不支持的部分中文姓,中文繁體,日文假名,還包括希臘字母以及俄語字母等字母。不過這種編碼不支持韓國字,也是其在實際使用中與unicode編碼相比欠缺的部分。

上述GBK/1和GBK/2的領域即GB 2312-80用通常方法編碼的區域。GB 2312(正確說法是其根據EUC-CN的編碼)和ISO/IEC 2022中調用GR其他的94²字符集一樣,A1FE的範圍開始讀取字節對。這是上圖中右下角的部分。但是,GB 2312中對於AAAFF8FE區域是空的,沒有賦予編碼。於是GBK就在這些領域裡進行拓展。二者剩餘部分作為用戶定義區。

更重要的是,GBK進行了字節範圍的擴展。ISO/IEC 2022中GR區域的字數有94²=8,836字的限制。只要放棄ISO/IEC 2022中針對圖形文字和控制文字賦予嚴格的範圍的模式,下位字節為單字節文字,上位字節對保留對應字符的功能,潛在的128²=16,384的代碼位置就可以使用。GBK採用其中的一部分,第一個字節從A1FE(每個字節有94個選項)擴展成81FE(126個選項),第二字節的範圍是40FE(191個選項),總共有24066(126*191)個位置。

與CP936字碼表比較[編輯]

微軟的CP936通常被視為等同GBK,連IANA也以「CP936」為「GBK」之別名[1]。事實上比較起來,GBK定義之字符較CP936多出95字(15個非漢字及80個漢字),皆為其時未收入ISO 10646 / Unicode之符號:非漢字包括異體字符號[2]、十二個表意文字描述字元(Ideographic Description Characters)[3]及GB 5007.1-85《信息交換用漢字24x24點陣字模集》附錄對GB 2312增加,但Unicode未收之拼音符號「ḿ」和「ǹ[4][5];漢字包括未收入ISO 10646的《簡化字總表》漢字52個、《康熙字典》及《辭海漢字部件28個[4]。CP936中的這95字分配到了Unicode的私有區域[6][7],現已全部收於新版Unicode(參見GB 18030#PUA)。

微軟在稍新一點的CP936中使用單字節 0x80 代表歐元字符(U+20AC),而《規範》之GBK編碼不含此字符。

輸入方法[編輯]

  • VimIM在Vim環境中,可以直接鍵入十進位或十六進位GBK碼。既不需要啟動輸入法,也不需要碼表。

參見[編輯]

注釋[編輯]

  1. ^ http://www.iana.org/assignments/charset-reg/GBK
  2. ^ 〾(U+303E)[1]
  3. ^ ⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻(U+2FF0 - U+2FFB)[2]
  4. ^ 4.0 4.1 簡體中文版Windows 95「GBK內碼輸入法」幫助文件,1995年
  5. ^ https://msdn.microsoft.com/en-us/goglobal/cc305153 可見六個拼音符號有兩個沒有收入(A8BC及A8BF);「ḿ」現為U+1E3F、「ǹ」現為U+01F9;舊電腦可以m和U+0301以及n和U+0300合成(顯示如「ḿ」及「ǹ」)
  6. ^ use of private area in GBK converter. [2007年12月25日]. 
  7. ^ PRC GBK (XGB). (原始內容存檔於2002-10-01).  GBK與Unicode變換表,非大陸計算機需要手工切換瀏覽器編碼頁至GBK才能正確查看

外部連結[編輯]