
下面對這個圖進行一下說明:
第一個紅框中的內容是我從unicode.org提供的GB2312->Unicode碼表中隨便抽取的一行,下面以它為例進行說明。
這里面列出的GB2312和我們計算機實際使用的GB2312是不一樣的。因為GB2312的和ASCII的編碼范圍有沖突,所以使用時都采用兩個字節高位置1的方式,也就是下面我列出的那個EUC才是在計算機內存儲形式的GB2312。原來這是一個“暗”字。
前者和”區位碼”是有直接關系的,”暗”的區位碼1621,轉換成HEX: 0×1015,只要把高低位都+0×20,就得到了GB2312: 0×3035。
下面再看看UNICODE,大家可以做一個實驗,把0×6697轉成DEC: 26263,建一個空白HTML檔(encoding隨意),在里面寫上 暗 怎么樣,就能看到這個字了吧:)
把它轉成BIN: 0110 0110 1001 0111, 查UTF-8的轉換表,這個字的Unicode: U+6679 在 U+0800 和 U+FFFF 之間,是要轉換成三字節的UTF-8的,轉換方法如上面所示,最后得出的UTF-8編碼就是: 0xE69A97。
UTF-8字符各字節含義
0×00-0×7F |
同ASCII,也不可能作為任何其他多字節UTF-8字符的一部分 |
0xC0-0xDF |
多字節UTF-8字符的開始字節,而且據此可以判斷出該UTF-8字符的長度(字節數) |
0×80-0xBF |
多字節UTF-8字符的跟隨字節 |
0xFE-0xFF |
UTF-8未使用 |
那么如何判斷UTF-8字符的長度呢?
0×00-0×7F |
1字節 |
0xC0-0xDF |
2字節 |
0xE0-0xEF |
3字節 |
0xF0-0xF7 |
4字節 |
0xF8-0xFB |
5字節 |
0xFC-0xFD |
6字節 |
UTF-8字符范圍
Unicode |
字節數 |
表示方法 |
字節范圍 |
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 |
略 |