GB 2312

GB 2312，在電腦科學領域內通常簡稱GB（或簡稱GB0），是指依據中華人民共和國推薦性國家標準《資訊交換用漢字編碼字符集·基本集》（GB/T 2312-1980）制定的簡體中文字符集。

## 歷史

該種編碼由中國國家標準總局於1980年發布，1981年5月1日實施。該種編碼通行於中國大陸；新加坡等地也採用此編碼。中國大陸幾乎所有的中文系統和國際化的軟體都支持GB 2312編碼。

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

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

## 分區表示

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

用所在的區和位來表示字符（實際上就是碼位）的方法稱為區位碼（或許叫「區位號」更為恰當）。例如「萬」字在45區82位，所以「萬」字的區位碼是 45-82（45是「區碼」，82是「位碼」）。在儲存進電腦時，電腦會在區位碼上加上特定數字後才保存進記憶體以確保和其他編碼兼容（如 ASCII）。轉碼後，區位碼的「區碼」會變成「高位字節」，而「位碼」會變成「低位字節」。

下列是「GB 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×00`至`0×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 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>`。

### EUC-CN（機內碼、內碼）

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

在 「GB 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>`。

### HZ

HZ 編碼是由李楓峰在1988年發明的編碼系統。其目的是在7位元組的限制下（如電子郵件）儲存 「GB 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×4D`，`r`的ASCII碼是`0×72`）。

## 修訂

《資訊交換用漢字 24x24 點陣字模集》（GB 5007.1—85）首次附錄對 「GB 2312」編碼之更正，包括：

- 調整拉丁字母「g」的字形
- 補充六個拼音符號 ɑ ḿ ń ň ǹ ɡ，用於漢語拼音
- 「鍾」更正為「鍾」
- 於第10區補充94個半字圖形字符（第3區之半形版本，相當於GB 1988—80）
- 於第11區加入第8區首32個拼音符號（包括以上補充六個）之半形版本。

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

「GB 2312」編碼本身一直未有修訂，但此等修訂部份收入相關字模集（下詳）、GB/T 12345、後續之GBK及GB 18030。

「GB 2312」編碼亦用於ISO-IR-165。

## 兩種不同的「GB 2312」編碼實現

有兩種不同的「GB 2312」編碼實現，在它們之間存在少量的差別，其中至少有一個是錯誤的。

區位碼（EUC碼）｜GBK子集｜GB2312.TXT｜字符名稱

01-04｜00B7｜30FB｜間隔點

01-10｜破折號

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

微軟.NET使用的是「GBK子集」實現。萬國碼國際化組件、libiconv-1.14、php-5.6、ActivePerl-5.20、Java 1.7、Python 3.4都使用「GB2312.TXT」實現。Ruby 2.2兼容兩者編碼，但內部使用「GBK子集」實現。W3C的編碼技術指南規定，應將`gb2312`字節流視為GBK編碼，與GB18030一併使用同一解碼器解碼。

## 字模集

- 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《圖形資訊交換用矢量漢字黑體字模集及數據集》

## 參見

- 同一時期的其他漢字編碼：大五碼、中文標準交換碼、中文資訊交換碼、香港增補字符集、JIS X 0208
- 統一碼、通用字符集（ISO/IEC 10646）
- 中日韓統一表意文字
- GB/T 12345

## 外部連結

- GB2312 80資訊交換用漢字編碼字符集 基本集 - 中華人民共和國教育部政府門戶網站
- TransWiki中文 - GB2312漢字拼音對照表
- GB2312 簡體中文編碼表
- 資訊交換用漢字編碼字符集屬性（官方）
- GB 2312-80 (CJKV Information Processing,Appendix E) "STSong-Light" font designed by Changzhou SinoType Technology
- 図書館員のコンピュータ基礎講座：GB 2312-80コード表

## 基本資料

- 日語原文：資訊交換用漢字編碼字符集·基本集、（GB 2312）
- _nomimecode：1
- mime：`GB_2312-80` （EUC 名為`GB2312`）
- 別名：iso-ir-58, chinese, csGB2312, csISO58GB231280
- 標準：GB/T 2312-1980
- 語言：簡體中文, 英文、部分支援：、繁體中文, 西里爾文, 希臘文
- 分類：可支援ISO-2022雙字節字元集，中日韓統一表意文字編碼
- 編碼格式：EUC-CN (`GB2312`)、HZ-GB-2312
- 拓展成：ISO-IR-165
- 前用：中文電碼
- 後續：GBK，GB 18030
- 其他相關編碼：JIS X 0208，KS X 1001