常用編碼格式一覽
首先來看一下常用的編碼有哪些,截圖自Notepad++。其中ANSI在中國(guó)大陸即為GBK(以前是GB2312),最常用的是 GBK 和 UTF8無BOM 編碼格式。后面三個(gè)都是有BOM頭的文本格式,UCS-2即為人們常說的Unicode編碼,又分為大端、小端。
所謂BOM頭(Byte Order Mark)就是文本文件中開始的幾個(gè)并不表示任何字符的字節(jié),用二進(jìn)制編輯器(如bz.exe)就能看到了。
- UTF8的BOM頭為 0xEF 0xBB 0xBF
- Unicode大端模式為 0xFE 0xFF
- Unicode小端模式為 0xFF 0xFE
何為GBK,何為GB2312,與區(qū)位碼有何淵源?
區(qū)位碼是早些年(1980)中國(guó)制定的一個(gè)編碼標(biāo)準(zhǔn),如果有玩過小霸王學(xué)習(xí)機(jī)的話,應(yīng)該會(huì)記得有個(gè)叫做“區(qū)位”的輸入法(沒記錯(cuò)的話是按F4選擇)。就是打四個(gè)數(shù)字然后就出來漢字了,什么原理呢。請(qǐng)看下面的區(qū)位碼表,每一個(gè)字符都有對(duì)應(yīng)一個(gè)編號(hào)。其中前兩位為“區(qū)”,后兩位為“位”,中文漢字的編號(hào)區(qū)號(hào)是從16開始的,位號(hào)從1開始。前面的區(qū)號(hào)有一些符號(hào)、數(shù)字、字母、注音符號(hào)(臺(tái))、制表符、日文等等。
而GB2312編碼就是基于區(qū)位碼的,用雙字節(jié)編碼表示中文和中文符號(hào)。一般編碼方式是:0xA0+區(qū)號(hào),0xA0+位號(hào)。如下表中的 “安”,區(qū)位號(hào)是1618(十進(jìn)制),那么“安”字的GB2312編碼就是 0xA0+16 0xA0+18 也就是 0xB0 0xB2 。根據(jù)區(qū)位碼表,GB2312的漢字編碼范圍是0xB0A1~0xF7FE
可能大家注意到了,區(qū)位碼里有英文和數(shù)字,按道理說是不是也應(yīng)該是雙字節(jié)的呢。而一般情況下,我們見到的英文和數(shù)字是單字節(jié)的,以ASCII編碼,也就是說現(xiàn)代的GBK編碼是兼容ASCII編碼的。比如一個(gè)數(shù)字2,對(duì)應(yīng)的二進(jìn)制是0x32,而不是 0xA3 0xB2。那么問題來了,0xA3 0xB2 又對(duì)應(yīng)到什么呢?還是2(笑)。注意看了,這里的2跟2是不是有點(diǎn)不太一樣?!確實(shí)是不一樣的。這里的雙字節(jié)2是