下面对这个图进行一下说明:
第一个红框中的内容是我从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 and Unicode FAQ (英文版)
UTF-8 and Unicode FAQ (中文版,不过比较老,还是2000年的:( )
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