何為GBK,何為GB2312,與區位碼有何淵源?
區位碼是早些年(1980)中國制定的一個編碼標准,如果有玩過小霸王學習機的話,應該會記得有個叫做“區位”的輸入法(沒記錯的話是按F4選擇)。就是打四個數字然后就出來漢字了,什么原理呢。請看下面的區位碼表,每一個字符都有對應一個編號。其中前兩位為“區”,后兩位為“位”,中文漢字的編號區號是從16開始的,位號從1開始。前面的區號有一些符號、數字、字母、注音符號(台)、制表符、日文等等。
而GB2312編碼就是基於區位碼的,用雙字節編碼表示中文和中文符號。一般編碼方式是:0xA0+區號,0xA0+位號。如下表中的 “安”,區位號是1618(十進制),那么“安”字的GB2312編碼就是 0xA0+16 0xA0+18 也就是 0xB0 0xB2 。根據區位碼表,GB2312的漢字編碼范圍是0xB0A1~0xF7FE
繼續字符編碼的學習。今天介紹一下GBK(漢字內碼擴展規范),GB 2312 GB18030。引用網友的話可以概括一下:
GBK和UTF8的區別:GBK就是在保存你的帖子的時候,一個漢字占用兩個字節。。外國人看會出現亂碼,此為我中華為自己漢字編碼而形成之解決方案。
UTF8就是在保存你的帖子的時候,一個漢字占用3個字節。。但是外國人看的話不會亂碼,此為西人為了解決多字節字符而形成之解決方案。
GBK——專門為解決漢字的編碼而生成的解決方案。
那么,一個漢字究竟被存儲為什么,就需要:先查unicode碼表,然后根據在碼表的位置進行計算。例如:“電”字,在碼表中是3575,計算成utf8就是E794B5,而在GB2312的碼表中為B5E7。
GBK的中文編碼是雙字節來表示的,英文編碼是用ASC||碼表示的,既用單字節表示。但GBK編碼表中也有英文字符的雙字節表示形式,所以英文字母可以有2種GBK表示方式。為區分中文,將其最高位都定成1。英文單字節最高位都為0。當用GBK解碼時,若高字節最高位為0,則用ASC||碼表解碼;若高字節最高位為1,則用GBK編碼表解碼。
編碼方式:
字符有一字節和雙字節編碼,00–7F范圍內是第一個字節,和ASCII保持一致,此范圍內嚴格上說有96個文字和32個控制符號。之后的雙字節中,前一字節是雙字節的第一位。總體上說第一字節的范圍是81–FE(也就是不含80和FF),第二字節的一部分領域在40–7E,其他領域在80–FE。具體來說,定義的是下列字節:
| 范圍 | 第1字節 | 第2字節 | 編碼數 | 字數 |
|---|---|---|---|---|
| 水准GBK/1 | A1–A9 |
A1–FE |
846 | 717 |
| 水准GBK/2 | B0–F7 |
A1–FE |
6,768 | 6,763 |
| 水准GBK/3 | 81–A0 |
40–FE (7F除外) |
6,080 | 6,080 |
| 水准GBK/4 | AA–FE |
40–A0 (7F除外) |
8,160 | 8,160 |
| 水准GBK/5 | A8–A9 |
40–A0 (7F除外) |
192 | 166 |
| 用戶定義 | AA–AF |
A1–FE |
564 | |
| 用戶定義 | F8–FE |
A1–FE |
658 | |
| 用戶定義 | A1–A7 |
40–A0 (7F除外) |
672 | |
| 合計: | 23,940 | 21,886 |
雙字節符號可以表達的64K空間如下圖所示。綠色和黃色區域是GBK的編碼,紅色是用戶定義區域。沒有顏色區域是不正確的代碼組合:

要點總結
GBK編碼是GB2312編碼的超集,向下完全兼容GB2312。
GB18030編碼向下兼容GBK和GB2312,
GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換。
GBK,GB2312以及Unicode都既是字符集,也是編碼方式,而UTF-8只是編碼方式,並不是字符集
參考技術博客【點擊】
GBK 碼表 【點擊轉載處】
轉自:https://www.cnblogs.com/batsing/p/charset.html
https://blog.csdn.net/hherima/article/details/50801360
