Unicode与UTF-8编码转换(一)
Unicode是一个符号集合,规定了符号的二进制代码,而UTF-8是Unicode的一种实现,具体Unicode和UTF-8的联系如下所示:Unicode符号范围 UTF-8编码规则
1 | 0000 0000 - 0000 007F | 0xxxxxxx
2 | 0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
3 | 0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
4 | 0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 | 0020 0000 - 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6 | 0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
由图可清晰的知道Unicode和UTF-8间的联系。其中UTF-8编码规则中的x就是让你编码的地方。接下来逐一举例说明各段的编码:
1,范围0x00-0x7F:给定的用例Unicode码为0x41,对应的二进制位:0100 0001,而UTF-8编码规则为:0xxxxxxx。故有:
0xxx xxxx
+ 100 0001
0100 0001
所以Unicode编码0x41转换为UTF-8后为:0x41。
所以对于区间段0x00-0x7F之间的Unicode和UTF-8编码是一致的。即与ASCII码一致(ASCII共规定了128个字符的编码)
2,范围0x80-0x7FF:给定的用例Unicode码为0x123,对应的二进制为:0001 0010 0011,而UTF-8编码规则为:110xxxxx 10xxxxxx。故有:
110x xxxx 10xx xxxx
+ 0 0100 10 0011
1100 0100 1010 0011
所以Unicode编码0x123转换为UTF-8后为:0xC4A3
3,范围0x800-0xFFFF:给定的用例Unicode码为0x4E25,对应的二进制为:0100 1110 0010 0101,而UTF-8编码规则为:1110xxxx 10xxxxxx 10xxxxxx,故有:
1110 xxxx 10xx xxxx 10xx xxxx
+ 0100 11 1000 10 0101
1110 0100 1011 1000 1010 0101
所以Unicode编码为0x4E25转换为UTF-8后为:0xE4B8A5
4,范围0x10000-0x10FFFF:给定的Unicode码为0x23456,对应的二进制为:0010 0011 0100 0101 0110,而UTF-8编码规则为:111100xx 10xxxxxx 10xxxxxx 10xxxxxx。故有:
1111 00xx 10xx xxxx 10xx xxxx 10xx xxxx
+ 00 10 0011 01 0001 01 0110
1111 0000 1010 0011 1001 0001 1001 0110
所以Unicode编码为0x23456转换UTF-8后为:0xF0A39196
5,范围0x200000-0x3FFFFFF:给定的Unicode码为0x234567,对应的二进制为:0010 0011 0100 0101 0110 0111,UTF-8编码规则为:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。故有:
1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
+ 00 1000 11 0100