GB 18030

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋

Template:NoteTA Template:Infobox character encoding GB 18030(全稱《信息技術 中文編碼字符集》)是中華人民共和國國家標準簡體中文字符集,由中華人民共和國信息產業部提出、信息產業部電子工業標準化研究所歸口。其向後兼容並替代GB 2312-1980GBKCP936傳統編碼,並支持UnicodeGB 13000)的所有碼位。GB 18030採用變長多字節編碼,每個字可以由1個、2個或4個字節組成。其編碼空間龐大,最多可定義161萬個字元。由於GB 18030完全支持Unicode,無需動用造字區即可支持中日韓統一表意文字、中國國內的少數民族文字以及emoji等字符。GB 18030在微軟Windows系統中的代碼頁54936

除編碼方法外,GB 18030還包含其他文字和語言以及本標準適用對象的要求。不過,GB 18030不是一個漢字規範,不定義漢字的正式字形;字形由《通用規範漢字表》進行規範。

版本[編輯]

本標準的第一版 GB 18030-2000《信息技術 信息交換用漢字編碼字符集 基本集的擴充》中華人民共和國信息產業部電子工業標準化研究所、北京大學計算機技術研究所、北大方正集團、北京方正新天地信息網絡科技有限責任公司、四通集團公司中國科學院軟體研究所、長城軟體公司、四通利方公司、中國軟體與技術服務股份有限公司、金山軟體公司聯想集團起草,由國家質量技術監督局於2000年3月17日發布和實施。此版本兼容Unicode 3.0的中日韓統一表意文字擴展區A,共收錄27,533個漢字。

本標準的第二版 GB 18030-2005《信息技術 中文編碼字符集》國家質量監督檢驗檢疫總局中國國家標準化管理委員會於2005年11月8日發布,並於2006年5月1日實施。此版本兼容Unicode 3.1的中日韓統一表意文字擴展區B,並刊載少數民族包括朝鮮文蒙古文(包括滿文托忒文錫伯文阿禮嘎禮文)、德宏傣文藏文維吾爾文哈薩克文柯爾克茲文彝文的文字。共有70,244個漢字。此標準內的單字節編碼部分、雙字節編碼部分,和四字節編碼部分收錄的少數中日韓統一表意文字擴展區A的漢字,為強制性標準。其他部分則屬於規模性標準。在中華人民共和國境內所有軟體產品,都需要支持這個同時包含單字節、雙字節和四字節編碼的規格。[1]Template:Rp

本標準的第三版 GB 18030-2022《信息技術 中文編碼字符集》國家市場監督管理總局和中國國家標準化管理委員會於2022年7月19日發布,並於2023年8月1日實施[2]。此版本兼容到Unicode 11為止的中日韓統一表意文字擴展區CDEF,並新增康熙部首,以及滇東北苗文傈僳文西雙版納新傣文西雙版納老傣文德宏傣文等少數民族文字以及蒙古文 BIRGA 符號,共收錄漢字87,887個和漢字部首228個,比上一版增加錄入了1.7萬餘個生僻漢字。此版本在保留總體結構的基礎上,從條文強制改為全文強制,但增加了「實現的級別」一章,定義了三個實現級別:

  • 級別1:支持中日韓統一表意文字和中日韓統一表意文字擴展區A的漢字(所有具備中文信息處理和交換功能的產品均應滿足此級別。與上一版的「部分強制」相比,實際要求「增加四字節編碼部分的CJK統一漢字」的 66 字。)
  • 級別2:在級別1的基礎上額外支持資料性附錄E中明確的《通用規範漢字表》中沒有包含在級別1之內的 8105 個漢字(作業系統資料庫管理系統中間件系統軟體和支撐軟體均應滿足此級別。)
  • 級別3:支持GB 18030-2022中所規定的全部漢字以及康熙部首(GB/T 4754《國民經濟行業分類》中任何用於政務服務和公共服務的信息技術產品和信息系統應均滿足此級別。)

Unicode支持[編輯]

不同GB 18030版本中Unicode碼位的映射更動
GB 字節串 Unicode 碼位
GB 18030-2000 GB 18030-2005
A8 BC (ḿ) Template:Code Template:Unichar
81 35 F4 37 Template:Unichar Template:Code

GB 18030在其標準中以碼表形式定義了除去Template:Tsl外的全部Unicode碼位的定義。由於GB 18030基本上是繞開已分配的碼點去指定需要對應的Unicode,其變換和UTF-8相比要複雜得多。在日常實現上,常常會直接使用一個偏移量表[3]

GB 18030-2005與GB 18030-2000、GBK相比,去除了很多原來映射在PUA中的編碼;後來剩餘的24個PUA碼位也在Unicode 4.1中加上。

在GB 18030-2022中,剩餘的24個PUA碼位已經被去除或更改對應,所有有意義字符都已經映射到正式的 Unicode 碼位上。[4]

Template:Anchor

國標碼碼表中私有區碼位的演變
GB 字節串 Unicode 碼位 Template:Ref label
GBK 1.0[5] GB 18030-2005 Unicode 4.1 GB 18030-2022[4]
A6 D9[6]Template:Rp U+E78D Template:Unichar
A6 DA U+E78E Template:Unichar
A6 DB U+E78F Template:Unichar
A6 DC U+E790 Template:Unichar
A6 DD U+E791 Template:Unichar
A6 DE U+E792 Template:Unichar
A6 DF U+E793 Template:Unichar
A6 EC U+E794 Template:Unichar
A6 ED U+E795 Template:Unichar
A6 F3 U+E796 Template:Unichar
A8 BC U+E7C7 Template:Unichar
A8 BF U+E7C8 Template:Unichar
A9 89 U+E7E7 Template:Unichar
A9 8A U+E7E8 Template:Unichar
A9 8B U+E7E9 Template:Unichar
A9 8C U+E7EA Template:Unichar
A9 8D U+E7EB Template:Unichar
A9 8E U+E7EC Template:Unichar
A9 8F U+E7ED Template:Unichar
A9 90 U+E7EE Template:Unichar
A9 91 U+E7EF Template:Unichar
A9 92 U+E7F0 Template:Unichar
A9 93 U+E7F1 Template:Unichar
A9 94[6]Template:Rp U+E7F2 Template:Unichar
A9 95 U+E7F3 Template:Unichar
FE 50 U+E815 Template:Unichar
FE 51 U+E816 Template:UnicharTemplate:Ref label U+E816
FE 52 U+E817 Template:UnicharTemplate:Ref label U+E817
FE 53 U+E818 Template:UnicharTemplate:Ref label U+E818
FE 54 U+E819 Template:Unichar
FE 55 U+E81A Template:Unichar
FE 56 U+E81B Template:Unichar
FE 57 U+E81C Template:Unichar
FE 58 U+E81D Template:Unichar
FE 59 U+E81E Template:Unichar
FE 5A U+E81F Template:Unichar
FE 5B U+E820 Template:Unichar
FE 5C U+E821 Template:Unichar
FE 5D U+E822 Template:Unichar
FE 5E U+E823 Template:Unichar
FE 5F U+E824 Template:Unichar
FE 60 U+E825 Template:Unichar
FE 61 U+E826 Template:Unichar
FE 62 U+E827 Template:Unichar
FE 63 U+E828 Template:Unichar
FE 64 U+E829 Template:Unichar
FE 65 U+E82A Template:Unichar
FE 66 U+E82B Template:Unichar
FE 67 U+E82C Template:Unichar
FE 68 U+E82D Template:Unichar
FE 69 U+E82E Template:Unichar
FE 6A U+E82F Template:Unichar
FE 6B U+E830 Template:Unichar
FE 6C U+E831 Template:UnicharTemplate:Ref label U+E831
FE 6D U+E832 Template:Unichar
FE 6E U+E833 Template:Unichar
FE 6F U+E834 Template:Unichar
FE 70 U+E835 Template:Unichar
FE 71 U+E836 Template:Unichar
FE 72 U+E837 Template:Unichar
FE 73 U+E838 Template:Unichar
FE 74 U+E839 Template:Unichar
FE 75 U+E83A Template:Unichar
FE 76 U+E83B Template:UnicharTemplate:Ref label U+E83B
FE 77 U+E83C Template:Unichar
FE 78 U+E83D Template:Unichar
FE 79 U+E83E Template:Unichar
FE 7A U+E83F Template:Unichar
FE 7B U+E840 Template:Unichar
FE 7C U+E841 Template:Unichar
FE 7D U+E842 Template:Unichar
FE 7E U+E843 Template:Unichar
FE 80 U+E844 Template:Unichar
FE 81 U+E845 Template:Unichar
FE 82 U+E846 Template:Unichar
FE 83 U+E847 Template:Unichar
FE 84 U+E848 Template:Unichar
FE 85 U+E849 Template:Unichar
FE 86 U+E84A Template:Unichar
FE 87 U+E84B Template:Unichar
FE 88 U+E84C Template:Unichar
FE 89 U+E84D Template:Unichar
FE 8A U+E84E Template:Unichar
FE 8B U+E84F Template:Unichar
FE 8C U+E850 Template:Unichar
FE 8D U+E851 Template:Unichar
FE 8E U+E852 Template:Unichar
FE 8F U+E853 Template:Unichar
FE 90 U+E854 Template:Unichar
FE 91 U+E855 Template:UnicharTemplate:Ref label U+E855
FE 92 U+E856 Template:Unichar
FE 93 U+E857 Template:Unichar
FE 94 U+E858 Template:Unichar
FE 95 U+E859 Template:Unichar
FE 96 U+E85A Template:Unichar
FE 97 U+E85B Template:Unichar
FE 98 U+E85C Template:Unichar
FE 99 U+E85D Template:Unichar
FE 9A U+E85E Template:Unichar
FE 9B U+E85F Template:Unichar
FE 9C U+E860 Template:Unichar
FE 9D U+E861 Template:Unichar
FE 9E U+E862 Template:Unichar
FE 9F U+E863 Template:Unichar
FE A0 U+E864 Template:Unichar
備註
a.Template:Note藍色代表私用區碼位
b.Template:NoteGB 18030-2022將Template:Unichar映射至0x95329031
c.Template:NoteGB 18030-2022將Template:Unichar映射至0x95329033
d.Template:NoteGB 18030-2022將Template:Unichar映射至0x95329730
e.Template:NoteGB 18030-2022將Template:Unichar映射至0x9536B937
f.Template:NoteGB 18030-2022將Template:Unichar映射至0x9630BA35
g.Template:NoteGB 18030-2022將Template:Unichar映射至0x9635B630

字節結構[編輯]

GB 18030包含三種長度的編碼:單字節的ASCII、雙字節的GBK(略帶擴展)、以及用於填補所有Unicode碼位的四字節UTF區段。GBK雙字節部分通過查表定義,而四字節部分則根據之前兩個部分沒有提到的通用字符集碼位順序填補。由於和GBK兼容,GB 18030在搜索ASCII字符時也需要使用特別代碼進行判斷。

GB 18030編碼[7]Template:Rp[8]Template:Rp[9]
GB 18030 碼位 UnicodeTemplate:Efn
字節1(最高位) 字節2 字節3 字節4
Template:CodeTemplate:Code 128 Template:CodeTemplate:Code
Template:Code 錯誤Template:Efn
Template:CodeTemplate:Code Template:CodeTemplate:Code 除去 Template:CodeTemplate:Efn Template:Val Template:CodeTemplate:Code 除去 Template:CodeTemplate:CodeTemplate:Efn
Template:CodeTemplate:Code Template:CodeTemplate:Code Template:CodeTemplate:Code Template:CodeTemplate:Code Template:Val
Template:Code — (Template:Val) (未來字符拓展)
Template:CodeTemplate:Code — (Template:Val) (未來漢字拓展)
Template:CodeTemplate:CodeTemplate:Efn
Template:CodeTemplate:Code Template:CodeTemplate:Code Template:CodeTemplate:Code Template:CodeTemplate:Code Template:Val 1 000010 FFFF
Template:CodeTemplate:Code — (Template:Val) (未來標準拓展)
Template:CodeTemplate:Code — (Template:Val) (用戶造字區域)
Template:Code 錯誤
總計 Template:Val

一、二字節區段基本就是GBK編碼,另外加上了專門的歐元字符、豎排版本的標點符號,以及造字區對Unicode造字區的對應。四字節區段可以視作兩段形似GBK二字節區段結構的部分,每段的第一字節可以為0x81到0xFE,第二字節為0x30到0x39。由於結構類似,能夠安全於GBK的字符串搜索程序對於GB 18030來說也基本安全(正如Template:Tsl的搜索程序對於EUCUTF-8也基本安全一般。)

四字節區段總共可以表達1,587,600(126×10×126×10)種字符,足以覆蓋Unicode的1,112,064(17×65536 − 2048個代理對)個有效碼位。

由於四字節區段通過填空定義,要寫出處理這段轉換的程序需要同時知道GBK的覆蓋範圍,並不簡單:

U+00DE (Þ) → 81 30 89 37
U+00DF (ß) → 81 30 89 38
U+00E0 (à) → A8 A4
U+00E1 (á) → A8 A2
U+00E2 (â) → 81 30 89 39
U+00E3 (ã) → 81 30 8A 30

WHATWGW3C的GB 18030實現通過一張「位置偏移表」記錄GB 18030四字節區中連續的幾塊碎片,以便高效處理轉換。[10]ICU[9]和glibc也都對大塊連續的區域使用了類似的策略。

參見[編輯]

注釋[編輯]

Template:Notelist

參考資料[編輯]

Template:Reflist

外部連結[編輯]

Template:Ideographic repertoire Template:中文信息處理 Template:Character encoding