utf-8编码转换为unicode编码:
Unicode是一个字符集,而UTF-8是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的(1-6个字节不等)。
下面是utf-8的编码表:
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
开头1的个数代表字符的字节数(第一列为了兼容ASCII字符)
下面分析一下如何将一个unicode中文的编码如何转换为utf-8的编码:
假设Unicode中汉字“你”的编码为“u5E05",转化为二进制为0101,1110,0000,0101 ,可以将Unicode二进制从低往高取出二进制,每次取6位,得到的3组二进制依次带入上述的utf-8的编码表(第3行):得到 11100101, 10111000,10000101 即得到utf-8的编码为E5B885。
即是: 0101,1110,0000,0101 分3段 0101 , 111000, 000101,
0101,1110,0000,0101 >>(右移) 12 ==> 0101 |(或) 11100000 ==>11100101
0101,1110,0000,0101 >> 6 ==> 0101,1110,00 &(与) 00111111 ==> 00111000 | 10000000 ==> 10111000
0101,1110,0000,0101 & 00111111 ==> 000101 | 10000000 => 10000101
得到的ut8编码的二进制 10111000 10000101 === E5B885
同样要将utf-8转换为unicode编码:你的utf-8编码为E5B885,转化为二进制11100101, 10111000,10000101,可以判断它占3个字节,即:将11100101, 10111000,10000101 => 0101,1110,0000,0101。
11100101 与 00011111 求与 =》 101
10111000 与 00111111 求与 =》 111000
10000101 与 00111111 求与 =》 000101,
得到unicode 编码的二进制 101111000000101 === u5E05 ;