什么是编码

事实上计算机只认识0和1,然而我们却可以通过计算机来显示文本,这就是靠编码实现的。编码其实就是约定的一个协议,比如ASCII编码约定了大写字母A对应十进制数65,那么在读取一个字符串的时候,看到65,计算机就知道这里说的是字母A的意思。

由于计算机是美国人发明的,所以这个ASCII编码设计时只采用1个字节存储(事实上只用了7位,1个字节有8位),包含了大小写英文字母,数字和一些符号。但是计算机在全世界普及之后,ASCII编码就成了一个瓶颈,因为1个字节是完全不足以容纳各国语言的。

大家都知道英文只用26个字母就可以组成不同的单词,而汉字光常用的就有好几千个,至少需要2个字节才足以存放,所以后来中国制定了GB2312编码,用于对汉字进行编码。

然后日本为自己的文字制定了SHIFT_JIS编码,韩国为自己的文字制定了EUR-KR编码,一时之间,各国都制定了自己的标准。不难想象,不同的标准放在一起,就难免出现冲突,这也正是为什么最初的计算机总是容易看到乱码的现象。

为了解决这个问题,unicode编码应运而生。unicode组织的想法最初也很简单:创建一个足够大的编码,将所有国家的编码都加进来,进行统一标准。

没错,这样问题就解决了。但新的问题也出现了:如果你写的文本只包含英文和数字,那么用unicode编码就显得特别浪费空间(用ASCII编码只占用一半的存储空间)。所以本着能省一点是一点的精神,unicode还创造了许多实现方式。

比如常用的utf-8编码就是unicode的一种实现方式,它是可变长编码,简单的说,就是当你的文本是ASCII编码的字符时,它用1个字节存放,而当你的文本是其他unicode字符的情况,他将按一定的算法转换,每个字符使用1-3个字节存放,这样便实现了有效节省空间的目的。

posted @ 2017-03-23 13:54  道高一尺  阅读(2725)  评论(0编辑  收藏  举报