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)去掉,你会惊喜的发现,剩余的部分
任何文字,它在盘磁上,都是若干个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)去掉,你会惊喜的发现,剩余的部分
相关文章推荐
- ASCII GBK Unicode UTF-8 区别和关系 编码关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- 简述 ascii、unicode、utf-8、gbk 的关系
- UTF,ISO8859-1,Unicode,GBK之间的关系的介绍
- ASCII, BIG5, GBK, Unicode, UTF之间的关系
- unicode和utf-8,gbk之间的转换与关系
- Unicode UCS UTF-8 GBK BIG5的关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- UTF-8,GBK, GB2312,和Unicode的关系解析
- gbk, unicode, utf-8的关系
- gbk, gb2312,big5,unicode,utf-8,utf-16之间的关系
- 编码和编码格式,unicode和GBK、UTF-8的关系
- ASCII、Unicode、GBK、UTF-8之间的关系
- ASCII、GBK、unicode、utf-8、iso-8859-1等编码的发展史和相互关系
- gbk, gb2312,big5,unicode,utf-8,utf-16 GBK、GB18030与Unicode的映射
- 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
- 常用字符集编码详解:ASCII+、GB2312、GBK、GB18030、unicode、UTF-8
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础