下面對(duì)這個(gè)圖進(jìn)行一下說(shuō)明:
第一個(gè)紅框中的內(nèi)容是我從unicode.org提供的GB2312->Unicode碼表中隨便抽取的一行,下面以它為例進(jìn)行說(shuō)明。
這里面列出的GB2312和我們計(jì)算機(jī)實(shí)際使用的GB2312是不一樣的。因?yàn)镚B2312的和ASCII的編碼范圍有沖突,所以使用時(shí)都采用兩個(gè)字節(jié)高位置1的方式,也就是下面我列出的那個(gè)EUC才是在計(jì)算機(jī)內(nèi)存儲(chǔ)形式的GB2312。原來(lái)這是一個(gè)“暗”字。
前者和”區(qū)位碼”是有直接關(guān)系的,”暗”的區(qū)位碼1621,轉(zhuǎn)換成HEX: 0×1015,只要把高低位都+0×20,就得到了GB2312: 0×3035。
下面再看看UNICODE,大家可以做一個(gè)實(shí)驗(yàn),把0×6697轉(zhuǎn)成DEC: 26263,建一個(gè)空白HTML檔(encoding隨意),在里面寫(xiě)上 暗 怎么樣,就能看到這個(gè)字了吧:)
把它轉(zhuǎn)成BIN: 0110 0110 1001 0111, 查UTF-8的轉(zhuǎn)換表,這個(gè)字的Unicode: U+6679 在 U+0800 和 U+FFFF 之間,是要轉(zhuǎn)換成三字節(jié)的UTF-8的,轉(zhuǎn)換方法如上面所示,最后得出的UTF-8編碼就是: 0xE69A97。
UTF-8字符各字節(jié)含義
0×00-0×7F | 同ASCII,也不可能作為任何其他多字節(jié)UTF-8字符的一部分 |
0xC0-0xDF | 多字節(jié)UTF-8字符的開(kāi)始字節(jié),而且據(jù)此可以判斷出該UTF-8字符的長(zhǎng)度(字節(jié)數(shù)) |
0×80-0xBF | 多字節(jié)UTF-8字符的跟隨字節(jié) |
0xFE-0xFF | UTF-8未使用 |
那么如何判斷UTF-8字符的長(zhǎng)度呢?
0×00-0×7F | 1字節(jié) |
0xC0-0xDF | 2字節(jié) |
0xE0-0xEF | 3字節(jié) |
0xF0-0xF7 | 4字節(jié) |
0xF8-0xFB | 5字節(jié) |
0xFC-0xFD | 6字節(jié) |
UTF-8字符范圍
Unicode | 字節(jié)數(shù) | 表示方法 | 字節(jié)范圍 |
---|---|---|---|
U-00000000 - U-0000007F |
1 | 0xxxxxxx | (0×00-0×7F) |
U-00000080 - U-000007FF |
2 | 110xxxxx 10xxxxxx | (0xC2-0xDF)(0×80-0xBF) |
U-00000800 - U-0000FFFF |
3 | 1110xxxx 10xxxxxx 10xxxxxx | 0xE0(0xA0-0xBF)(0×80-0xBF) (0xE1-0xEF)(0×80-0xBF)(0×80-0xBF) |
U-00010000 - U-001FFFFF |
4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 0xF0(0×90-0xBF)(0×80-0xBF) (0×80-0xBF)(0xF1-0xF7)(0×80-0xBF) (0×80-0xBF)(0×80-0xBF) |
U-00200000 - U-03FFFFFF |
5 | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | 略 |
U-04000000 - U-7FFFFFFF |
6 | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | 略 |