跳至內容

漢字內碼擴展規範

維基百科,自由的百科全書
漢字內碼擴展規範
GBK 字節分配。
MIME / IANAGBK
別名CP936, MS936, windows-936, csGBK
語言國際,但以簡體中文為主,瀏覽器多以GB 18030解碼
標準GBK 1.0
現狀非正式國標編碼,已被GB 18030取代
分類擴展ASCII[a]變長編碼CJK
拓展自EUC-CN
前用GB2312
後續GB 18030

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

GBK為「國家標準擴展」的漢語拼音(Guójiā Biāozhǔn Kuòzhǎn)中的「國」「標」「擴」第一個聲母。英文全稱Chinese Internal Code Extension Specification。

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

歷史

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向下完全兼容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中使用單字節 0x80 代表歐元字符(U+20AC),而《規範》之GBK編碼不含此字符。

輸入方法

參見

註釋

  1. ^ 嚴格來說不是,因為ASCII字節會出現在GBK拓展二字節部分的後半字

參考文獻

外部連結