GB/T 2312

出自求聞百科

信息交換用漢字編碼字符集 基本集》(GB/T 2312[註 1],曾用代碼GB/T 2312–80GB/T 2312–1980)是中華人民共和國國家標準簡體中文字符集,通常簡稱GB(「國標」漢語拼音首字母),又稱GB0,由中國國家標準總局於1980年發布,1981年5月1日實施。GB/T 2312編碼通行於中國新加坡等地也採用此編碼。中國幾乎所有的中文系統和國際化的軟件都支持GB/T 2312。

概述

GB/T 2312標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時收錄了包括拉丁字母希臘字母日文平假名片假名字母、俄語西里爾字母在內的682個字符。

GB/T 2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國99.75%的使用頻率。但對於人名古漢語等方面出現的罕用字繁體字,GB/T 2312不能處理,因此後來GBKGB 18030漢字字符集相繼出現以解決這些問題。

分區表示

GB/T 2312中對所收漢字進行了「分區」處理,每區含有94個漢字/符號,共計94個區。用所在的區和位來表示字符(實際上就是碼位),因此稱為區位碼(或許叫「區位號」更為恰當)。表示方式也稱為區位碼。例如「萬」字在45區82位,所以「萬」字的區位碼是:45 82(注意,GB類漢字編碼為雙字節編碼,因此,45相當於高位字節,82相當於低位字節)。

  • 01~09區(682個):特殊符號、數字、英文字符、制表符等,包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母等在內的682個全角字符;
  • 10~15區:空區,留待擴展;在附錄3,第10區推薦作為 GB 1988–80 中的94個圖形字符區域(即第3區字符之半形版本)。
  • 16~55區(3755個):常用漢字(也稱一級漢字),按拼音排序;
  • 56~87區(3008個):非常用漢字(也稱二級漢字),按部首/筆畫排序;
  • 88~94區:空區,留待擴展。

國標碼(交換碼)

為了避開ASCII字符中的CR0不可顯示字符(十六進制為0 ~ 1F,十進制為0 ~ 31)及空格字符0010 0000(十六進制為20,十進制為32),國標碼(又稱為交換碼)規定表示漢字雙字節編碼範圍為十六進制為(21,21) ~ (7E,7E),十進制為(33,33) ~ (126,126) 。因此,須將「區碼」和「位碼」分別加上32(十六進制為20H),作為國標碼。以避免與ASCII字符中0~32的不可顯示字符和空格字符相衝突。

例如: 「萬」字的國標碼十進制為:(45+32,82+32) = (77,114),十六進制為:(4D,72H)。

內碼(機內碼)

國標碼和通用的ASCII碼衝突。把國標碼中的每個字節的最高位都從0換成1,即相當於每個字節都再加上128(十六進制為80,即80H;二進制為1000 0000),從而得到國標碼的「機內碼」表示,簡稱「內碼」。

字節結構

在使用GB/T 2312的程序通常採用EUC儲存方法,以便兼容於ASCII。這種格式稱為EUC-CN瀏覽器編碼表上的「GB2312」就是指這種表示法。

每個漢字及符號以兩個字節來表示。第一個字節稱為「高位字節」,第二個字節稱為「低位字節」。

「高位字節」使用了0xA1–0xF7(把01–87區的區號加上0xA0),「低位字節」使用了0xA1–0xFE(把01–94加上0xA0)。 由於一級漢字從16區起始,漢字區的「高位字節」的範圍是0xB0–0xF7,「低位字節」的範圍是0xA1–0xFE,佔用的碼位是72*94=6768。其中有5個空位是D7FA–D7FE。

例如「啊」字在大多數程序中,會以兩個字節,0xB0(第一個字節)0xA1(第二個字節)儲存。(與區位碼對比:0xB0=0xA0+16,0xA1=0xA0+1)。

對「不規範簡化字」和繁體字的收錄

  • 收了兩個不合乎中華人民共和國標準的簡化字
    • (68–41):由「审[審]」類推簡化而來,但《簡化字總表》已將「」簡化歸併為「」。舊版《新華字典》收有此字,釋為「汁」;新版取消,併入「」。
    • (79–64):由「钅[釒]」類推簡化而來,但《簡化字總表》已將「」簡化歸併為「」。
  • 收了三個繁體字
    • (79–81):原版收入使用繁體偏旁之「」字,但《簡化字總表》已將「」和「」簡化歸併為「」;後續的字模附錄將之修正為「[注 1]
    • (65–65):該繁體字已經在《簡化字總表》簡化歸併成「」(26–83)字,而且沒有說明在語義不清時用「」來表示,可是GB/T 2312卻多收此字。
    • (84–80):原版收入使用繁體偏旁之「」字,但《簡化字總表》規範「」字應當簡化為「」;對應的簡化字「」是由日本的簡化漢字「」提交上 Unicode。2013年《通用規範漢字表》收錄「麹」(2013:7748)。

修訂

GB 5007.1–85《信息交換用漢字 24x24 點陣字模集》首次附錄對 GB/T 2312 之更正,包括:

GB/T 2312 本身一直未有修訂,但此等修訂部份收入相關字模集(下詳)、GB/T 12345、後續之 GBKGB 18030

GB/T 2312 亦用於 ISO-IR-165

兩種不同的GB/T 2312實現

有兩種不同的GB/T 2312實現,在它們之間存在少量的差別,其中至少有一個是錯誤的。

字節序 GBK子集 GB2312.TXT 字符名稱[1]
A1A4 U+00B7 · MIDDLE DOT U+30FB KATAKANA MIDDLE DOT 間隔點
A1AA U+2014 EM DASH U+2015 HORIZONTAL BAR 破折號

GBK子集與GBK/GB 18030兼容,GB2312.TXT則不兼容。後者基於ftp.unicode.org曾經提供的GB2312.TXT實現,[2]於2011年由官方棄用,[3]2016年9月時已無原文件蹤跡。此外還有很多種廠商實現。[2]

截至2015年 (2015-Missing required parameter 1=month!),微軟.NET使用的是「GBK子集」實現。ICU[4]、libiconv-1.14、[5]php-5.6、ActivePerl-5.20、Java 1.7、Python 3.4[6]都使用「GB2312.TXT」實現。Ruby 2.2兼容兩者編碼,但內部使用「GBK子集」實現。W3C的編碼技術指南規定,應將gb2312字節流視為GBK編碼,與GB18030一併使用同一解碼器解碼。[7]

字模集

  • GB 5007.1–85《信息交換用漢字 24x24 點陣字模集》
  • GB 5007.2–85《信息交換用漢字 24x24 點陣字模數據集》
  • GB 5199.1–85《信息交換用漢字 15x16 點陣字模集》
  • GB 5199.2–85《信息交換用漢字 15x16 點陣字模數據集》
  • GB 6345.1–86《信息交換用漢字 32x32 點陣字模集》
  • GB 6345.2–86《信息交換用漢字 32x32 點陣字模數據集》
  • GB 12034–89《信息交換用漢字 32x32 點陣仿宋體字模集及數據集》
  • GB 12035–89《信息交換用漢字 32x32 點陣楷體字模集及數據集》
  • GB 12036–89《信息交換用漢字 32x32 點陣黑體字模集及數據集》
  • GB 12037–89《信息交換用漢字 36x36 點陣宋體字模集及數據集》
  • GB 12038–89《信息交換用漢字 36x36 點陣仿宋體字模集及數據集》
  • GB 12039–89《信息交換用漢字 36x36 點陣楷體字模集及數據集》
  • GB 12040–89《信息交換用漢字 36x36 點陣黑體字模集及數據集》
  • GB 12041–89《信息交換用漢字 48x48 點陣宋體字模集及數據集》
  • GB 12042–89《信息交換用漢字 48x48 點陣仿宋體字模集及數據集》
  • GB 12043–89《信息交換用漢字 48x48 點陣楷體字模集及數據集》
  • GB 12044–89《信息交換用漢字 48x48 點陣黑體字模集及數據集》
  • GB/T 13443–92《信息交換用漢字 128x128 點陣楷體字模集及數據集》
  • GB/T 13444–92《信息交換用漢字 128x128 點陣仿宋體字模集及數據集》
  • GB/T 13445–92《信息交換用漢字 256x256 點陣楷體字模集及數據集》
  • GB/T 13446–92《信息交換用漢字 256x256 點陣仿宋體字模集及數據集》
  • GB/T 13844–92《圖形信息交換用矢量漢字單線宋體字模集及數據集》
  • GB/T 13845–92《圖形信息交換用矢量漢字宋體字模集及數據集》
  • GB/T 13846–92《圖形信息交換用矢量漢字仿宋體字模集及數據集》
  • GB/T 13847–92《圖形信息交換用矢量漢字楷體字模集及數據集》
  • GB/T 13848–92《圖形信息交換用矢量漢字黑體字模集及數據集》

注釋

  1. 1965年《印刷通用漢字字形表》將「」(使用簡化偏旁)註明為「作為人名地名及引用文言文的時候仍有需要」;2013年《通用規範漢字表》收錄「锺」(2013:7679),可用於姓名
  2. ɑ(U+0251)
    ḿ(U+1E3F;Unicode 3.0 始開始收納,故 CP936 亦未收[1]
    ń(U+0144)
    ň(U+0148)
    ǹ(U+01F9;Unicode 3.0 始開始收納,故 CP936 亦未收[2]
    ɡ(U+0261)
  1. 自2017年3月23日起,根據2017年第7號公告和強制性標準整合精簡結論,該標準轉化成推薦性標準,不再強制執行,由「GB 2312–80」改稱為「GB/T 2312」。參見:GB/T 2312-1980. 中國國家標準全文公開系統. [2020-03-30]. 

參考文獻

  1. GB 2312-1980: Information technology—Chinese ideogram coded character set for information interchange (basic set). 
  2. 2.0 2.1 Haible, Bruno. GB2312 (Conversion Tables). [29 September 2016]. 
  3. Readme - MAPPINGS/OBSOLETE/EASTASIA. 9 August 2001 [29 September 2016]. 
  4. java-EUC_CN-1.3_P.ucm. [29 September 2016]. [永久失效連結]
  5. libiconv:lib/gb2312.h. GNU Savannah. [29 September 2016]. 
  6. Issue 24036. Python Bug Tracker. [2015-04-24]. 
  7. Encoding § Names and labels. W3C. [29 September 2016]. 

外部連結

參見