unicode和utf-8,gbk之间的转换与关系

时间:2022-04-13 22:24:50

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 ;