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

GB 2312
MIME / IANAGB_2312-80 (EUC 名為GB2312
別名iso-ir-58, chinese, csGB2312, csISO58GB231280
語言簡體中文, 英文
部分支援:
繁體中文, 西里爾文, 希臘文
標準GB/T 2312-1980
分類可支援ISO-2022雙字節字元集中日韓編碼
拓展成ISO-IR-165
編碼格式EUC-CN (GB2312),
HZ-GB-2312
前用中文電碼
後續GBKGB 18030
其他相關編碼JIS X 0208KS X 1001

概述

編輯

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

GB/T 2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。但對於人名古漢語等方面出現的罕用字繁體字,GB/T 2312不能處理,而是由一系列的國標輔助集負責編碼和顯示(如GB/T 12345《信息交換用漢字編碼字符集 第一輔助集》、GB/T 7589 《信息交換用漢字編碼字符集 第二輔助集》及GB/T 7590《信息交換用漢字編碼字符集 第四輔助集》),但是 ISO-2022-CN-EXT 最終未給國標除了 GB/T 2312 以外的其他輔助集提供逃逸字符串[1][2]。後來GBKGB 18030漢字字符集相繼出現以解決這些問題。

分區表示

編輯

GB/T 2312 中對所收漢字進行了「分區」處理,每區含有94個漢字/符號,共計94個區。實際上,GB/T 2312 只使用了87區。

用所在的區和位來表示字符(實際上就是碼位)的方法稱為區位碼(或許叫「區位號」更為恰當[來源請求])。例如「万」字在45區82位,所以「万」字的區位碼是 45-82(45是「區碼」,82是「位碼」)。在儲存進電腦時,電腦會在區位碼上加上特定數字後才保存進內存以確保和其他編碼兼容(如 ASCII)。轉碼後,區位碼的「區碼」會變成「高位字節」,而「位碼」會變成「低位字節」。

下列是 GB/T 2312 分區後在區段內儲存的字符:

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

字節結構

編輯

在 GB 2312 內,每個漢字及符號的碼位使用兩個字節來表示。第一個字節稱為「高位字節」,對應分區的編號(把區位碼的「區碼」加上特定值);第二個字節稱為「低位字節」,對應區段內的個別碼位(把區位碼的「位碼」加上特定值)。

ISO 2022-CN(國標碼、交換碼)

編輯

為了避開ASCII字符中的不可顯示字符(十六進制為0×000×1F,十進制為0至31)及空格字符(十六進制為0×20,十進制為32),國標碼(又稱為交換碼)參考 ISO 2022 規定表示非 ASCII 字符雙字節編碼範圍為十六進制為 <21 21>-<7E 7E>,十進制為 (33, 33) 至 (126, 126)。因此,在進行碼位轉換時,須將「區碼」和「位碼」分別加上32(十六進制為0×20)作為國標碼。

在這個編碼模式內,軟件需要使用低端控制字符(C0),高端控制字符(C1)和US-ASCII字符集(GL)標註字符屬於單字節(ASCII)還是雙字節,相對容易造成亂碼(如丟失控制/轉義字符)。

在 GB/T 2312 內,高位字節使用了0x21—0x77(把01—87區的區號加32或0×20),低位字節使用了0x21—0x7E(把01—94加上32或0×20)。

例:「万」字(區位碼 45-82)的 ISO 2022 碼十進制為:(45+32, 82+32) = (77, 114),十六進制為:<4D 72>[3][4]

EUC-CN(機內碼、內碼)

編輯

因為國標碼和通用的ASCII碼衝突,因此後續為了方便辨認單字節和雙字節的編碼,部分廠商在 ISO 2022 的基礎上把雙字節字符的二進制最高位都從 0 換成 1,即相當於把 ISO 2022 的每個字節都再加上128(十六進制為0×80)得到「機內碼」表示,簡稱「內碼」。把「區碼」和「位碼」分別加上160(十六進制為0×A0)也可以得到相同的機內碼表示,這種格式也就是EUC。使用GB/T 2312的程序通常採用 EUC 儲存方法,以便兼容於 ASCII。這種格式稱為EUC-CN瀏覽器編碼表上的「GB2312」就是指這種表示法。

在 GB/T 2312 內,高位字節使用了0xA1—0xF7(把01—87區的區號加160或0×A0),低位字節使用了0xA1—0xFE(把01—94加上160或0×A0)。非 ASCII 字符雙字節編碼範圍為十六進制為 <A1 A1>-<FE FE>,十進制為 (161, 161) 至 (254, 254)。

例:「万」字(區位碼 45-82)的 EUC 碼十進制為:(45+160, 82+160) = (205, 242),十六進制為:<CD F2>[3][4]

HZ 編碼是由李楓峰在1988年發明的編碼系統[5]。其目的是在7字節的限制下(如電子郵件)儲存 GB/T 2312 的雙字節字符。其在 ISO 2022 編碼字符的前後分別加上轉義字符~{7E 7B)和~}7E 7D)後,使用正常的ASCII轉碼變成 ASCII 字符。部分機器也可以接受使用 EUC-CN 編碼的轉義字符。

例:「万」字(區位碼 45-82)的 ISO 2022 碼十六進制為 <4D 72>。加上轉義字符後,字符串變成7E 7B 4D 72 7E 7D。HZ的編碼即為~{Mr~}M的ASCII碼是0×4Dr的ASCII碼是0×72)。[6]

修訂

編輯

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

GB 5007.1—1985曾將「」(84—80)更換成「」,但是後續修訂(GB 5007.1—2001 和 GB/T 5007.1—2010)和其他字模集仍舊保留 GB/T 2312的繁體偏旁「」之「」。

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

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

兩種不同的GB/T 2312實現

編輯

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

區位碼(EUC碼) GBK子集 GB2312.TXT 字符名稱[9]
01-04 (<A1 A4>) U+00B7 · MIDDLE DOT U+30FB KATAKANA MIDDLE DOT 間隔點
01-10 (<A1 AA>) U+2014 EM DASH U+2015 HORIZONTAL BAR 破折號

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

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

字模集

編輯
  • GB 5007.1—1985《信息交換用漢字 24×24 點陣字模集》
  • GB 5007.2—1985《信息交換用漢字 24×24 點陣字模數據集》
  • GB 5199.1—1985《信息交換用漢字 15×16 點陣字模集》
  • GB 5199.2—1985《信息交換用漢字 15×16 點陣字模數據集》
  • GB 6345.1—1986《信息交換用漢字 32×32 點陣字模集》
  • GB 6345.2—1986《信息交換用漢字 32×32 點陣字模數據集》
  • GB/T 12034—1989《信息交換用漢字 32×32 點陣仿宋體字模集及數據集》
  • GB/T 12035—1989《信息交換用漢字 32×32 點陣楷體字模集及數據集》
  • GB/T 12036—1989《信息交換用漢字 32×32 點陣黑體字模集及數據集》
  • GB/T 12037—1989《信息交換用漢字 36×36 點陣宋體字模集及數據集》
  • GB/T 12038—1989《信息交換用漢字 36×36 點陣仿宋體字模集及數據集》
  • GB/T 12039—1989《信息交換用漢字 36×36 點陣楷體字模集及數據集》
  • GB/T 12040—1989《信息交換用漢字 36×36 點陣黑體字模集及數據集》
  • GB/T 12041—1989《信息交換用漢字 48×48 點陣宋體字模集及數據集》
  • GB/T 12042—1989《信息交換用漢字 48×48 點陣仿宋體字模集及數據集》
  • GB/T 12043—1989《信息交換用漢字 48×48 點陣楷體字模集及數據集》
  • GB/T 12044—1989《信息交換用漢字 48×48 點陣黑體字模集及數據集》
  • GB/T 13443—1992《信息交換用漢字 128×128 點陣楷體字模集及數據集》
  • GB/T 13444—1992《信息交換用漢字 128×128 點陣仿宋體字模集及數據集》
  • GB/T 13445—1992《信息交換用漢字 256×256 點陣楷體字模集及數據集》
  • GB/T 13446—1992《信息交換用漢字 256×256 點陣仿宋體字模集及數據集》
  • GB/T 13844—1992《圖形信息交換用矢量漢字單線宋體字模集及數據集》
  • GB/T 13845—1992《圖形信息交換用矢量漢字宋體字模集及數據集》
  • GB/T 13846—1992《圖形信息交換用矢量漢字仿宋體字模集及數據集》
  • GB/T 13847—1992《圖形信息交換用矢量漢字楷體字模集及數據集》
  • GB/T 13848—1992《圖形信息交換用矢量漢字黑體字模集及數據集》

注釋

編輯
  1. ^ 自2017年3月23日起,根據2017年第7號公告和強制性標準整合精簡結論,該標準轉化成推薦性標準,不再強制執行,由「GB 2312—80」改稱為「GB/T 2312」。中国国家标准全文公开系统 - GB/T 2312-1980. 中國國家標準全文公開系統. [2020-03-30]. (原始內容存檔於2021-02-27). 
  2. ^ ɑ(U+0251)
    ḿ(U+1E3F;Unicode 3.0 始開始收納,故代碼頁936亦未收[7]
    ń(U+0144)
    ň(U+0148)
    ǹ(U+01F9;Unicode 3.0 始開始收納,故代碼頁936亦未收[8]
    ɡ(U+0261)

參考文獻

編輯
  1. ^ Lunde, Ken. CJKV information processing: Chinese, Japanese, Korean & Vietnamese computing 2nd Ed. Sebastopol, Calif: O'Reilly & Associates. : 239. ISBN 9780596514471. 
  2. ^ RFC 1922 (1996)
  3. ^ 3.0 3.1 品雪. 中文编码小知识. 知乎專欄. [2022-05-02] (中文). 
  4. ^ 4.0 4.1 Lunde, Ken Roger. CJKV Information Processing 第二版. O'Reilly. 2008年十二月 [2022-05-02]. ISBN 978-0-596-51447-1. (原始內容存檔於2011-08-29). 
  5. ^ HZ — A Data Format for Exchanging Files of Arbitrarily Mixed Chinese and ASCII Characters. (原始內容存檔於2005-10-27). 
  6. ^ HZ-GB-2312中文编码详解 - 云+社区 - 腾讯云. cloud.tencent.com. [2022-05-02]. (原始內容存檔於2020-09-29). 
  7. ^ http://www.microsoft.com/globaldev/reference/dbcs/936/936_A8.mspx
  8. ^ http://www.microsoft.com/globaldev/reference/dbcs/936/936_A8.mspx
  9. ^ GB 2312-1980: Information technology—Chinese ideogram coded character set for information interchange (basic set). [2 October 2016]. 
  10. ^ 10.0 10.1 Haible, Bruno. GB2312 (Conversion Tables). [29 September 2016]. (原始內容存檔於2016-10-20). 
  11. ^ Readme - MAPPINGS/OBSOLETE/EASTASIA. 9 August 2001 [29 September 2016]. (原始內容存檔於2015-08-01). 
  12. ^ java-EUC_CN-1.3_P.ucm. [29 September 2016]. [永久失效連結]
  13. ^ libiconv:lib/gb2312.h. GNU Savannah. [29 September 2016]. 
  14. ^ Issue 24036. Python Bug Tracker. [2015-04-24]. (原始內容存檔於2016-03-04). 
  15. ^ Encoding § Names and labels. W3C. [29 September 2016]. (原始內容存檔於2017-03-18). 

外部連結

編輯

參見

編輯