下面對這個圖進(jìn)行一下說明:
第一個紅框中的內(nèi)容是我從unicode.org提供的GB2312->Unicode碼表中隨便抽取的一行,下面以它為例進(jìn)行說明。
這里面列出的GB2312和我們計(jì)算機(jī)實(shí)際使用的GB2312是不一樣的。因?yàn)镚B2312的和ASCII的編碼范圍有沖突,所以使用時都采用兩個字節(jié)高位置1的方式,也就是下面我列出的那個EUC才是在計(jì)算機(jī)內(nèi)存儲形式的GB2312。原來這是一個“暗”字。
前者和”區(qū)位碼”是有直接關(guān)系的,”暗”的區(qū)位碼1621,轉(zhuǎn)換成HEX: 0×1015,只要把高低位都+0×20,就得到了GB2312: 0×3035。
下面再看看UNICODE,大家可以做一個實(shí)驗(yàn),把0×6697轉(zhuǎn)成DEC: 26263,建一個空白HTML檔(encoding隨意),在里面寫上 暗 怎么樣,就能看到這個字了吧:)
把它轉(zhuǎn)成BIN: 0110 0110 1001 0111, 查UTF-8的轉(zhuǎn)換表,這個字的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 (中文版,不過比較老,還是2000年的:( )
UTF-8字符各字節(jié)含義

0×00-0×7F
同ASCII,也不可能作為任何其他多字節(jié)UTF-8字符的一部分

0xC0-0xDF
多字節(jié)UTF-8字符的開始字節(jié),而且據(jù)此可以判斷出該UTF-8字符的長度(字節(jié)數(shù))

0×80-0xBF
多字節(jié)UTF-8字符的跟隨字節(jié)

0xFE-0xFF
UTF-8未使用

那么如何判斷UTF-8字符的長度呢?

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