下面對(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隨意),在里面寫上 暗 怎么樣,就能看到這個(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 and Unicode FAQ (英文版)
UTF-8 and Unicode FAQ (中文版,不過(guò)比較老,還是2000年的:( )
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
略