跳至內容

GB 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 2312,在電腦科學領域內通常簡稱GB(或簡稱GB0),是指依據中華人民共和國推薦性國家標準資訊交換用漢字編碼字元集·基本集》(GB/T 2312-1980)[註 1]制定的簡體中文字元集

歷史

[編輯]

該種編碼由中國國家標準總局於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」編碼 以外的其他輔助集提供逃逸字串[2][3]。後來GBKGB 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×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 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>[4][5]

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>[4][5]

HZ

[編輯]

HZ 編碼是由李楓峰在1988年發明的編碼系統[6]。其目的是在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×4Dr的ASCII碼是0×72)。[7]

修訂

[編輯]

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

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

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

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

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

[編輯]

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

區位碼(EUC碼) GBK子集 GB2312.TXT 字元名稱[10]
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實現,[11]於2011年由官方棄用,[12]2016年9月時已無原檔案蹤跡。此外還有很多種廠商實現。[11]

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

字模集

[編輯]
  • 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. ^ 國家標準《資訊交換用漢字編碼字元集·基本集》在發布時為強制性國家標準,標準號為GB 2312-80,故簡稱GB 2312(「GB」指「國標」漢語拼音首字母)。自2017年3月23日起,根據2017年第7號公告和強制性標準整合精簡結論,該標準轉化成推薦性標準,不再強制執行,標準號因此相應改為「GB/T 2312-1980」。[1]。但習慣上,該字元集仍被廣泛稱為「GB 2312」。
  2. ^ ɑ(U+0251)
    ḿ(U+1E3F;Unicode 3.0 始開始收納,故代碼頁936亦未收[8]
    ń(U+0144)
    ň(U+0148)
    ǹ(U+01F9;Unicode 3.0 始開始收納,故代碼頁936亦未收[9]
    ɡ(U+0261)

參考文獻

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

參見

[編輯]

外部連結

[編輯]