漢字編碼之GBK編碼


何為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。具體來說,定義的是下列字節:

 

GBK的編碼范圍
范圍 第1字節 第2字節 編碼數 字數
水准GBK/1 A1A9 A1FE 846 717
水准GBK/2 B0F7 A1FE 6,768 6,763
水准GBK/3 81A0 40FE (7F除外) 6,080 6,080
水准GBK/4 AAFE 40A0 (7F除外) 8,160 8,160
水准GBK/5 A8A9 40A0 (7F除外) 192 166
用戶定義 AAAF A1FE 564  
用戶定義 F8FE A1FE 658  
用戶定義 A1A7 40A0 (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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM