阅读 59

计算机是如何正确的显示的

计算机只能处理二进制数据,那那些字母、数字、中文、日文等全国各地的文字是如何正确的显示在屏幕上呢

屏幕上的东西是如何显示出来的

简单的来说,我们看到的屏幕可以理解为由很多像素组成的一个平面,屏幕上显示的所有东西,都是计算机的处理器将二进制数据发送给显示系统 显示系统按照一定的规则把这些二进制数据'显示'在屏幕的这些像素点上

编码

计算机能识别的是二进制数据,是'机器语言'。而我们看到是文字都是'人类语言'。那么要想计算机能够理解'人类语言' 必须把'人类语言'转换成'机器语言',而这个转换的过程就叫编码。

二进制数据其实就是一些由0和1组成的(bit)序列。八个位组成一组,称为字节,每个字节表示某个字符

所以可以想像的出,譬如字符'1', 它的二进制数据应该是 00110001这样的格式,那么字符串'123'的二进制数据应该是00110001|00110010|00110011 这样的一个序列,处理器将这样一个二进制序列发送给显示系统,显示系统依次从前往后读取字节将每个字节对应的字符显示在屏幕上。

ASCII码

刚刚的编码都是基于字节的格式想象的。计算机是美国先发明的,所以标准也是由他们制定。早在计算机发明之初,为了统一,美国的组织就制定了一个编码标准。于是他们将英文、数字以及其他一些控制字符编成了ASCII码表(美国信息互换标准代码)

ASCII码一共规定了128位字符,最前面以为统一规定为0,只占用字节的后7位,可能也是为了扩展而留的把

当计算机越来越普遍,传到其他非英文的国家时,发现他们国家的文字显示不了,因为ascii表里面根本没有他们的语言字符,为了支持他们的的语言,人们便将ASCII码进行了扩展 于是Unicode编码应运而生

Unicode编码

上面说到一个字节是8 位,ASCII码用一个字节来也就是8 位来表示一个字符,那么一个字节最多可以表示2^8=256种字符,很显然,要兼容全世界的语言字符用一个字节来表示一个字符是不够的,必须使用多个字符来表达一个字符。

这个时候,各个国家就诞生了各种各样的编码,那计算机使用不同的编码格式去读取数据就会出现乱码

锘挎槬鐪犱笉瑙夋檽锛屽 譬如一些这样的字符,他们不是计算机随便画出的一些图形,而是计算机按照当前系统设置的编码格式对二进制数据进行解码得到的字符显示上去的,正好解码成了其他的语言,所以在我们看来就看不懂了

那么,如果有一种编码可以将所有语言字符都编码进去那不就不会产生乱码问题了吗。这就是Unicode编码.

Unicode编码就如它的名字一样,是统一码,万国码。Unicode只是一个字符集,规定了世界上所有符号对应的二进制数,至今还在不断的扩充新字符。Unicode只规定了字符的代码,却没规定如何存储。

例如汉字对应的的Unicode码是U+4E25 ,这是十六进制数字,方便人们阅读和转换,它对应的二进制是100111000100101,占了15位,需要两个字节来表示,那还有其他千千万万的字符可能就需要更多的字节来表示了

那么问题来了,一个字符可能会占用多个字节,计算机不知道一串二进制序列是表示一个字符还是几个字符,那么肯定要标注字符所占字节的长度才能正确的解析出来正确的字符

UTF-8