unicode和utf

  unicode和utf-8之间最大的区别就是在存储上。unicode是宽字符存储(字符都是2个字节或4个字节来存储),而utf-8是多字节存储, 字符的个数是不确定的(比如英文字符是1个字节表示,汉字可以是2个到6个来表示),其字符的首字节的前几位表明了它的字节个数。比如某个3字节汉字的 uft-8编码(二进制)如下:  
  1110xxxx   10xxxxxx   10xxxxxx  
  首字节中1的个数为3表明该汉字用3个字节来表示。


Unicode定义了两种编码格式:UTF-8和UTF-16。UTF-8编码与ASCII向后兼容。任何合法的ASCII编码都会自动成为合法的 UTF-8编码,使得将现有的ASCII数据库转换为Unicode数据库非常容易。UTF-8使用一个码点值来生成一个分布到一到四个字节上的位模式。    
   
  给定字符的UTF-8编码中的每个字节都被称为一个编码单元。标准ASCII字符集中字符的码点使用0x00到0x7F范围内的单一编码单元进行编码。大多数非亚洲文字用一个或两个编码单元(或字节)来表示每个字符。  
   
  在Unicode   3.1中,定义了大量新的增补字符,每个字符需要包含四个UTF-8编码单元。    
   
  第二种重要的编码格式是UTF-16,它使用了一个双字节的编码单元。最重要的是,UTF-16和ASCII一样简单,因为编码单元的值与0x0000到 0xFFFF范围内的任意码点的码点值相同。对于该范围内的字符,UTF-16是固定长度的双字节编码。再回过来看一下我们前面涉及ghe的例子,你可以 使用直接与该字符的码点对应的编码单元0x0490在UTF-16中表示它。 


就是说,ascii字符在utf-8里面还是一样的,一个字节表示,超出ascii字符范围的,就用多字节表示,字节的数目由第一字节确定,最多6字节。如下:  
  utf-8:  
  1字节:0XXXXXXX(ascii)  
  2字节:110XXXXX   10XXXXXX  
  3字节:1110XXXX   10XXXXXX   10XXXXXX  
  4字节:11110XXX   10XXXXXX   10XXXXXX   10XXXXXX  
  5字节:。。。  
  utf-16:所有:XXXXXXXX   XXXXXXXX  
  ascii:XXXXXXXX   00000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值