您的位置:首页 > 其它

gbk, unicode, utf-8的关系

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

任何文字,它在盘磁上,都是若干个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)去掉,你会惊喜的发现,剩余的部分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: