gbk, unicode, utf-8的关系

网上已经有很多文章解析这三者的关系,可惜看了之后仍然似懂非懂,原因在于大部分文章都偏重理论的解释,而缺少真枪真刀的例子。本文力求以一个短小精干的实例,试图解析这三者的关系。

 

任何文字,它在盘磁上,都是若干个0、1的组合。

同一个文字,在不同的编码规范中,它的0、1组合可能是不一样的。例如,“我”字的三种编码如下:

 

gbk:           0xCE 0xD2

unicode:     0x62 0x11

utf-8:          0xE6 0x88 0x91

 

可见,gbk、unicode都使用两个字节来表示一个汉字,而utf-8则使用了三个字节。 gbk与unicode有一个映射表:http://www.chi2ko.com/jingyan/gbk2uni.htm,在上面可以查到“我”字的编码。

 

那么utf-8又是什么东西,其实“我”字的utf-8编码里,含有了unicode的编码信息(稍后解释)。utf-8是从老外的立场提出来的,因为他们觉得按照unicode的编码规范,即使是一个英文字母,也需要用两个字节(第一个字节为0x00)来表示,这对于一篇纯英文的文章,其大小相当于使用ASCII编码的两倍,对磁盘是很大的浪费。所以他们提出了utf-8,对于他们使用较少的中文,用三个字节来表示,而对于英文字母,则使用一字节即可表示。

 

utf-8使用不定长的编码方式,对于“我”字,它使用了三个字节,把这三个字节变成二进制格式:

 

0xE6 0x88 0x91 => 11100110 10001000 10010001

 

对比一下“我”字的unicode编码的二进制表示:

 

0x62 0x11         => 0110 0010 0001 0001

 

若你把utf-8的二进制格式中的加粗部分(1110 10 10)去掉,你会惊喜的发现,剩余的部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值