文章目录
计算机如何显示文字
计算机是以二进制的形式保存/处理数据,不管我们使用键盘输入还是让计算机去读取一个文本文件,计算机得到的原始内容是一些二进制数据,当需要对这些二进制数据进行显示时,计算机会依照某种翻译机制/编码方式,取到这些二进制序列所表示的每个文字的轮廓描述(点阵或矢量图),知道了轮廓,计算机便可以将二进制序列所表示的实际的文字形状显示到屏幕。
编码
我们知道,计算机所有的信息最终都表示为一个二进制的字符串,每个二进制位(bit)有0和1两种状态。假设字符A对应的二进制为01000010(这个随便编的),存储时,将此二进制串存入计算机;读取时,再将01000010还原成字符A。那么存储时,A到底应该对应01000010,还是10000000、11110101?这个时候就需要一个规则,这个规则可以将字符映射到唯一一种状态(二进制字符串),这就是编码。
最早出现的编码规则是ASCII编码,在ASCII编码中,字符A既不对应01000010,也不对应1000 0000、11110101,而是对应01000001(不要问为什么,这是规则)。
概念理解
位(Bit )
数据存储的最小单位(即0或1),简称为b,也可称为比特
字节(Byte )
存储空间的基本计量单位,是一个8位的存储单元,取值范围是0-255,1Byte = 8bit
字节顺序
多字节的值在内存中的存储顺序,通常有大端(Big Endian)、小端(Little Endian)两种字节顺序。
BOM (Byte Order Mark)
字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标记文件采用哪种合适的编码;
UCS编码中有个‘Zero Width No-break Space/零宽无间断间隔’字符, 它的编码是FEFF,UCS规范我们在传输字节流前,先传输字符‘Zero Width No-break Space’,这样如果接收者收到FEFF,就表明这个字节流是Big-Endian,如果收到FFFE,就表明这个字节流是Little-Endian;
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式,字符‘Zero Width No-break Space’的UTF-8编码是EF BB BF,如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了;Windows采用BOM来标记文本文件的编码方式;
编码 | 表示(16进制) | 表示(10进制) |
---|---|---|
UTF-8 | EF BB BF |