UTF8 编码原理简介

utf8 支持的字符比较全,相应的,它就必须是变长编码。它大致的原理如下:

                UTF-8
编码范围编码编码表示的值
U+000000-U+00007f0xxxxxxx0xxxxxxx
U+000080-U+0007ff110yyyxx00000yyy xxxxxxxx
U+000800-U+00ffff1110yyyy 10yyyyxx 10xxxxxxyyyyyyyy xxxxxxxx
U+010000-U+10ffff11110zzz 10zzyyyy 10yyyyxx 10xxxxxx000zzzzz yyyyyyyy xxxxxxxx

从上表可以看出,每来一个新的字节,utf8分3种情况:
(1)以0打头,那么之后7位就是内容,这是ASCII的字符
(2)以10打头,说明当前字节保存部分字符内容,之后6位是这个字符的内容
(3)以110/1110/11110/…打头,说明这是字符的起始位,并且有几个1,这个字符就有多少个字节。
以上表为例,就能明白了。

在看处理utf8编码的代码中会看到类似于下面的代码:

int strlen_utf8(char *s) 
{
  int i = 0, j = 0;
  while (s[i]) 
  {
    if ((s[i] & 0xc0) != 0x80) j++; // 这就是在处理字符的连续内容
    i++;
  }
  return j;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值