utf8的编码算法

 

例如字符"汉"的unicode是6C49,把这个unicode字符表示为一个大整数,然后转变成多字节编码110110001001001:
          
观察这个整数的二进制码序列(110,110001,001001)
          从后往前取
          
如果这个二进制序列只有后7位(小于128,也就是ascii字符)则直接取后7位二进制数形成一个utf8字符。
          
上面的字符“汉”二进制序列大于7位,所以取后6位(1001001),加10形成一个utf8字节(10 001001 ,16进制89)。
          
剩下的二进制序列(110,110001)从后向前取6位,加10形成一个utf8字节(10 110001,16进制B1)。
          
剩下的二进制序列(110)从后向前取6位,由于不足6位,将这个数和1110000相或,得到字符11100110,16进制E6
          
最后,就得到了utf8编码,16进制表示为E6B189

 

解读UTF8编码
2007-01-19 10:40

在网络中有很多地方都有采用UTF8编码,由于要编写与邮件服务端有关的程序,而邮件服务端有些地方用到了UTF8编码,所以对它有了初步的认识!

它其实和Unicode是同类,就是在编码方式上不同!
首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的! 
我们先来看Unicode的编码:一个英文字母 “a” 和 一个汉字 “好”,编码后都是占用的空间大小是一样的,都是两个字节!

而UTF8编码:一个英文字母“a” 和 一个汉字 “好”,编码后占用的空间大小就不样了,前者是一个字节,后者是三个字节!

现在就让我们来看看UTF8编码的原理吧:
  因为一个字母还有一些键盘上的符号加起来只用二进制七位就可以表示出来,而一个字节就是八位,所以UTF8就用一个字节来表式字母和一些键盘上的符号。然而当我们拿到被编码后的一个字节后怎么知道它的组成?它有可能是英文字母的一个字节,也有可能是汉字的三个字节中的一个字节!所以,UTF8是有标志位的!

  当要表示的内容是 7位 的时候就用一个字节:0*******  第一个0为标志位,剩下的空间正好可以表示ASCII 0-127 的内容。

  当要表示的内容在 8 到 11 位的时候就用两个字节:110***** 10******  第一个字节的110和第二个字节的10为标志位。

  当要表示的内容在 12 到 16 位的时候就用三个字节:1110***** 10****** 10******    和上面一样,第一个字节的1110和第二、三个字节的10都是标志位,剩下的空间正好可以表示汉字。

  以此类推:
四个字节:11110**** 10****** 10****** 10****** 
  五个字节:111110*** 10****** 10****** 10****** 10****** 
  六个字节:1111110** 10****** 10****** 10****** 10****** 10****** 
  .............................................
 ..............................................

明白了没有?
编码的方法是从低位到高位

现在就让我们来看看实例吧!

红色为标志位
其它着色为了显示其,编码后的位置 

Unicode十六进制


Unicode二进制


UTF8二进制


UTF8十六进制


UTF8字节数


B


00001011


00001010


B


1


9D


00010011101


11000010 10011101 


C2 9D


2


A89E


10101000 10011110


11101010 10100010 10011110


EA A2 9E


3

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值