各种编码

常见的和编码相关的几个关键词:

  • ASCII
  • Unicode
  • UTF-6,UTF-16,UTF-32
  • GBK
  • ISO
    下面开始一个一个的解释:

ASCII码

计算机中所有的信息都是以二进制的形式存在的.
早先美国人发明了计算机,为了用计算机表示他们美国人可以看懂的信息,就将26个英文字母以及一些常用字符用二进制代码表示.
二进制代码和对应的英语字符的关系被规定为ASCII码.
ASCII码一共规定了128个字符的编码. 这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的统一规定为0.
计算机每次读一个字节,解码出具体字符在屏幕上显示出来.

ISO编码

欧洲人发现ASCII编码只能表示英语字符,法语\德语中还有很多符号是ASCII编码所不能表示的.
因此欧洲人自己又炮制出来一套编码ISO.
ISO编码把ASCII码中字节的最高位也用掉了.
跟ASCII编码一样,计算机每次也只读一个字节,解码具体字符.

GBK编码

跟美国人和欧洲人一样,中国人也想用计算机表示我们中国人自己的文字信息.
于是GBK编码油然而生. 由于汉字的数量比较大,一个字节8位是表示不够用的,所以计算机在处理GBK编码的时候分两步:
1.第一位是0,按照ASCII编码来读入一个字节
2.第一位是1,读入两个字节

当然还有日本的shift _JIS编码,韩国的Euc-kr编码.各国有各国字节的编码方式.这样的话,就会出现问题:
如果一篇文章中有好几个国家的语言显示.这篇文章就会乱码,无法阅读. 为了解决这个问题,Unicode编码诞生了.

Unicode编码

Unicode的诞生类似于"秦灭六国,统一货币".当然,Unicode并没有把其他编码给消灭掉,但它几乎收纳了世界上大部分的字符.
这些字符都有唯一的编码,这就解决了多国语言同一页面显示乱码的问题.
Unicode编码的编号从0到100多万(3个字节),每一个区间对应一种语言的编码.

Unicode编码虽然解决了乱码的问题,但同时又带来一个新的问题:空间浪费.
比如英语字母明明可以用一个字节来表示,Unicode中却要用3个字节,这是对空间的严重浪费.
为了解决空间浪费的问题,UTF编码就诞生了.

UTF-8,UTF-16-UTF-32

UTF仅仅是编码的解决方案,并不是一种新的编码方式.
Unicode只是一个符号集,它规定了符号的二进制代码,但是没有规定这些二进制代码应该如何存储.
所以UTF-8仅仅是Unicode编码的一种具体实现形式.
UTF-8采用变长的编码方式,可以用1~4个字节表示一个符号,根据不同的符号而变化字节长度.
所以,UTF-8是节省空间的.
在英文字符比较多的内容中,采用UTF-8编码比较节省空间,
在中文字符比较多的内容中,采用UTF-16比较节省空间,因为汉字至少需要两个字节来表示.

猜你喜欢

转载自my.oschina.net/u/1771419/blog/1622661