常用編碼格式一覽

首先來看一下常用的編碼有哪些,截圖自Notepad++。其中ANSI在中國大陸即為GBK(以前是GB2312),最常用的是 GBK 和 UTF8無BOM 編碼格式。后面三個都是有BOM頭的文本格式,UCS-2即為人們常說的Unicode編碼,又分為大端、小端。

所謂BOM頭(Byte Order Mark)就是文本文件中開始的幾個并不表示任何字符的字節(jié),用二進制編輯器(如bz.exe)就能看到了。

  1. UTF8的BOM頭為 0xEF 0xBB 0xBF
  2. Unicode大端模式為 0xFE 0xFF
  3. Unicode小端模式為 0xFF 0xFE

何為GBK,何為GB2312,與區(qū)位碼有何淵源?

區(qū)位碼是早些年(1980)中國制定的一個編碼標準,如果有玩過小霸王學習機的話,應該會記得有個叫做“區(qū)位”的輸入法(沒記錯的話是按F4選擇)。就是打四個數字然后就出來漢字了,什么原理呢。請看下面的區(qū)位碼表,每一個字符都有對應一個編號。其中前兩位為“區(qū)”,后兩位為“位”,中文漢字的編號區(qū)號是從16開始的,位號從1開始。前面的區(qū)號有一些符號、數字、字母、注音符號(臺)、制表符、日文等等。

而GB2312編碼就是基于區(qū)位碼的,用雙字節(jié)編碼表示中文和中文符號。一般編碼方式是:0xA0+區(qū)號,0xA0+位號。如下表中的 “安”,區(qū)位號是1618(十進制),那么“安”字的GB2312編碼就是 0xA0+16  0xA0+18 也就是 0xB0 0xB2 。根據區(qū)位碼表,GB2312的漢字編碼范圍是0xB0A1~0xF7FE

區(qū)位碼表節(jié)選

可能大家注意到了,區(qū)位碼里有英文和數字,按道理說是不是也應該是雙字節(jié)的呢。而一般情況下,我們見到的英文和數字是單字節(jié)的,以ASCII編碼,也就是說現(xiàn)代的GBK編碼是兼容ASCII編碼的。比如一個數字2,對應的二進制是0x32,而不是 0xA3 0xB2。那么問題來了,0xA3 0xB2 又對應到什么呢?還是2(笑)。注意看了,這里的2跟2是不是有點不太一樣?!確實是不一樣的。這里的雙字節(jié)2是