ASCII、Unicode、UTF-8

107 阅读3分钟

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295

不够万能的ASCII码

  • ASCII 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,如:1,'a',@,就是单个数字,字符,和特殊符号,但是中文的表示一个字符肯定不够,所以中国制定了表示中文的编码方式GB2312,但是世界上有那么多种语言,各个国家有各个国家的表示方式,如何能做到不错误乱码的问题,因此Unicode就出现了

万能但是浪费的Unicode码

  • Unicode 标准也在不断发展,但最常用的是UCS-16编码,用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
    1. ASCII一个字节,‘a’用65表示,二进制 01000001
    2. Unicode 最少俩个字节,那么a 的二进制 00000000 01000001

如果只需要传输a是不是存储和传输的时候无缘无故的多消耗了一些资源,这时候UTF-8(可变长的字符编码方式)

智能的字符编码UTF-8

  • UTF-8 编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节,再看看表示方式:
字符ASCIIUnicodeUTF-8
A0100000100000000 0100000101000001
x01001110 0010110111100100 10111000 10101101

电脑内的文件和内存之间的编码是如何转换的

  • 我们要明白我们编辑的数据是在内存中,保存的数据是落地到磁盘上的,我们用编辑器或者文本编辑软件打开一个文件其实是电脑从硬盘上读取到内存中的,这就是我们不可能一次性读进来一个大于我们电脑内存的文件,既然读取可定要叫交互。现在电脑内存中一般通用unicde编码方式,文件上使用utf-8保存,加载到电脑的内存使用unicode,然后再用utf-8保存进文件 文件 ---> 内存:unicdoe 读取 内存 ---> 文件:utf-8 保存 同理,服务器和浏览器页面也是,我们经常在新建HTML文件的时候meta utf-8,服务器Unicode,页面使用UTF-8