Unicode 与 UTF-8 编码对应规则

holder


Unicode和BigEndianUnicode 区别


    这两者只是存储顺序不同,如"A"的unicode编码为65 00 ,BigEndianUnicode编码为00 65

UTF-8

    注:UTF(UCS Transformation Format):UCS只是规则的如何编码,但是没有规则如何传输、保管这个编码。UTF则规则了由几个字节保管这个编码。    这是为传输而设计的编码,其系列还有UTF-7和UTF-16 以及 UTF-32


    其中UTF-16和Unicode编码大致一样, UTF-8就是以8位为单元对Unicode进行编码。从Unicode到UTF-8的编码方式如下: 
     Unicode编码(16进制)      UTF-8 字节流(二进制) 
     0000 - 007F         0xxxxxxx 
     0080 - 07FF         110xxxxx 10xxxxxx 
     0800 - FFFF         1110xxxx 10xxxxxx 10xxxxxx

  例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 1100 0100 1001,用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。


可以查看java.io.DataInputStream的readUTF方法的具体实现算法。


另外 百度百科里讲的很详细


编码转换:

加入我们从网络收到一个unicode 编码值 x, 但是当前的设备不支持 Unicode 字符集(所以不知道这个x对应的什么符号),只支持gb2312, 那么我们需要通过 unicode编码表 和 gb2312编码表 找到 x 对应的gb2312编码值,然后就可以找到对应的符号 

你可能感兴趣的:(Unicode 与 UTF-8 编码对应规则)