ASCII,Unicode和UTF-8均为计算机系统中对字符的编码方式,现在对三者的区别和关系进行分析:
ASCII:
ASCII 码由美国制定,使用指定的 7 位或 8 位二进制数(单字节)组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础ASCII码,使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。
例如:在ASCII码当中,01000001这个8位二进制数(也就是十进制65)表示字符‘A’,所以当我们输入A时,计算机就可以通过ASCII码知道输入的字符的二进制编码为01000001。
但是正因为是美国制定,所以ASCII满足的就是美国需要(例如英语字母符号和其中的特殊字符),其他国家的字母符号文字就不在其中,例如汉字,因为汉字在计算机编码当中至少需要2个字节才能表示。
Unicode:
为了实现一种统一化的字符编码方式,满足世界大部分国家需求,所以推出了Unicode编码。
Unicode,官方中文名称为统一码,是计算机科学领域的业界标准。它整理、编码了世界上大部分的文字系统,使得电脑可以用更为简单的方式来呈现和处理文字。(来源于维基百科)
对于Unicode,采用的是两个字节(16位二进制)来表示字符,这样能基本满足各种国家语言字符的需求。例如:在Unicode当中,字符‘A’的表示便成为了00000000 01000001,就是在ASCII中在高位加8个0。
所以如果你有一个全英文写作的文本,对比ASCII,用Unicode来编码就会对内存造成很大的浪费。
UTF-8:
为了节约内存,同时进一步统一,推出了UTF-8。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度的字符编码方式。它可以用一至四个字节对Unicode字符集中的所有有效编码点进行编码。
一般而言,值较小的编码字符,使用频率较高,直接使用Unicode编码效率低下,大量浪费内存空间。所以在UTF-8当中,对于用8位二进制数编码的ASCII字符,我们在UTF-8中直接照搬,所以一个纯ASCII字符串也是一个合法的UTF-8字符串,现存的ASCII文本不需要转换。我们也可以把ASCII看作为UTF-8的一个子集,这样的话,传统的扩展ASCII字符集设计的软件通常可以不经修改或很少修改,就能与UTF-8一起使用。
因为UTF-8能减少内存浪费,同时尽可能实现统一,它逐渐成为电子邮件、网页及其他存储或发送文字优先采用的编码方式。