GB2312、GBK、GB18030、BIG5這些是ANSI範疇下漢字的編碼實現,接下來一一介紹。
GB2312
簡介:
GB2312編碼適用於漢字處理、漢字通信等系統之間的信息交換,通行於中國大陸;新加坡等地也採用此編碼。
分區表示:
GB 2312中對所收漢字進行了“分區”處理,每區含有94個漢字/符號。這種表示方式也稱爲區位碼,如下( 舉例來說,“啊”字是GB2312之中的第一個漢字,它的區位碼就是1601,即16區第1個):
- 01-09區爲特殊符號。
- 16-55區爲一級漢字,按拼音排序。
- 56-87區爲二級漢字,按部首/筆畫排序。
- 10-15區及88-94區則未有編碼。
存儲實現:
通常採用EUC(Extended Unix Code)儲存方法,以便兼容於ASCII。瀏覽器編碼表上的“GB2312”,通常都是指“EUC-CN”表示法。每個漢字及符號以兩個字節來表示。第一個字節稱爲“高位字節”(也稱“區字節)”,第二個字節稱爲“低位字節”(也稱“位字節”)。“高位字節”使用了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)。注:因爲都加了0xA0(字節最高位必爲1),所以可以據此判斷是ASCII字符(一個字節表示),還是漢字(兩字節表示)
測試
#include <iostream>
using namespace std;
int main()
{
char szAnsi[] = "啊";
for( int i = 0; i < sizeof(szAnsi); ++i )
{
cout << std::hex << (int)(unsigned char)(szAnsi[i]) << endl;
}
return 0;
}
輸出結果(啊的編碼正好是0XB0A1):
b0
a1
0
當然也可以通過記事本寫入一個啊字,然後保存爲ANSI格式,再使用Binary Viewer
查看二進制數據,也可得出0xB0A1的結果。
GBK
- 簡介:
GBK編碼,是在GB2312-80標準基礎上的內碼擴展規範,使用了雙字節編碼方案,其編碼範圍從8140至FEFE(剔除xx7F),共23940個碼位,共收錄了21003個漢字,完全兼容GB2312-80標準,支持國際標準ISO/IEC10646-1和國家標準GB13000-1中的全部中日韓漢字,幷包含了BIG5編碼中的所有漢字。GBK 向下與 GB 2312 編碼兼容,向上支持 ISO 10646.1國際標準,是前者向後者過渡過程中的一個承上啓下的產物。ISO 10646 是國際標準化組織 ISO 公佈的一個編碼標準,即 Universal Multilpe-Octet Coded Character Set(簡稱UCS),大陸譯爲《通用多八位編碼字符集》,臺灣譯爲《廣用多八位元編碼字元集》,它與 Unicode 組織的 Unicode 編碼完全兼容。ISO 10646.1 是該標準的第一部分《體系結構與基本多文種平面》。我國 1993 年以 GB 13000.1 國家標準的形式予以認可(即 GB 13000.1 等同於 ISO 10646.1)
GB1830
- 簡介
2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。GB18030 是最新的漢字編碼字符集國家標準, 向下兼容 GBK 和 GB2312 標準。
BIG5
- 簡介
Big5,又稱爲大五碼或五大碼,是使用繁體中文(正體中文)社區中最常用的電腦漢字字符集標準,共收錄13,060個漢字。
總結
以上是對漢字幾種編碼的的簡要陳列說明,發展歷史線路可總結爲:- GB2312表示簡體中文,基本上能滿足計算機對簡體中文的處理需求,BIG5是表示繁體中文的編碼。
- 在GB2312的基礎上加入了繁體中文等一些其它的罕見字符,就出現了GBK。
- 在GBK的基礎上加入少數民族的字符及其它一些字符,就出現了GB18030。
引用參考:
- https://baike.baidu.com/item/%E4%BF%A1%E6%81%AF%E4%BA%A4%E6%8D%A2%E7%94%A8%E6%B1%89%E5%AD%97%E7%BC%96%E7%A0%81%E5%AD%97%E7%AC%A6%E9%9B%86/8074272
- https://zhidao.baidu.com/question/745154723282624332.html
- https://baike.baidu.com/item/%E5%A4%A7%E4%BA%94%E7%A0%81/2413431?fromtitle=Big5&fromid=1780793&fr=aladdin
- https://baike.baidu.com/item/GBK%E5%AD%97%E5%BA%93/3910360?fromtitle=GBK&fromid=481954&fr=aladdin
- https://baike.baidu.com/item/gb18030/3204518?fr=aladdin