ASCII、Unicode 和 UTF-8 的关系是什么?

        因为通电的设备最初只有断电(0)跟通电(1)两种状态,所以计算机里面所有复杂的事情归根结底都是由0和1排列组合而成的,因此,要在计算机上显示文字,必须要让文字与相应的0和1(即二进制数)相对应起来才行。

        由于最初计算机是美国人发明的,所以最早的对应关系为:f(二进制数) = 英文字符 ,其中英文字符包含数字。这里的对应关系 f 被称为编码表(ASCII,1个字节)。但是随着计算机的普及,计算机开始被各个国家的人所使用,对于只能表示英文跟数字的 ASCII 并不能满足大家的需求,例如就不能显示中文、韩文和日文等其他国家的文字。于是我们中国自己制定了GB2312编码把中文加进ASCII码里面(意思是GB2312兼容ASCII的对应法则,GB2312只是在ASCII的基础上进行了扩展),与此同时,其他国家也这么干了,每个国家都有一套自己的编码,于是在多语言混合的文本中就会出现乱码的情况(因为国家与国家基本都不会相互兼容)。

        那为什么大家不制定一个统一的编码来兼容世界上所有的语言呢?因此 Unicode 便应运而生,它把所有的语言都统一到了一套编码里面,这样只要大家都用这套编码的画,就不会再存在乱码的情景了。

        但是随着 Unicode 加入的语言越来越多,编码所需的字节越来越多(4个字节),有时候一篇英文文献本来用 ASCII 存只需要1k,但是用 unicode 的话,就会增加到4k,这样在网络上传输造成很大的资源浪费,因此本着节约的精神出现了可变长的 UTF-8 编码,它即兼容 ASCII 和其他语言,也不会造成太多的空间浪费。

        现在存储的时候一般都会把文本保存成UTF-8的形式存储下来(因为这样比较省空间),但是在计算机内存中,也还是统一使用 unicode 编码,因为 unicode 为定长编码,对于定长编码 CPU 的处理效率更高。即计算机从硬盘读取文本,并将其编码格式 (UTF-8) 转换成 Unicode 到 CPU 进行处理,等到处理完毕之后,再将内存里面 Unicode 编码的文本转换成 UTF-8 存到硬盘中。

注:1 字节 = 8 位

你可能感兴趣的:(ASCII、Unicode 和 UTF-8 的关系是什么?)