1.为什么需要Ascii?
我们都知道在在计算机的世界中只有0和1,那么我们如何和计算机进行交互呢?所以Ascii码就出来了,他用一个字节去表示一个字符,就是一个byte,我们都知道一个byte是8位,就是00000000到11111111位,ASCII是1960年由美国来定制的,一直用到现在,例如A就是65,a就是97,一个规定了128个字符的编码。
2.UNICODE的出现
每一个国家都有自己的语言,例如中国就有10w字,那么ASCII码显然就不够用,一开始有一些国家还利用ASCII没有用到的数字去做自己的一些字符映射,例如130在法语编码中代表了é,但是这样就会造成一个问题,法国用130来代表自己的文字,但是在德国又是另外一个意思,在中国更加用了新的编码方式GBK,
这样其实在没有互联网的时代,其实也没有什么问题,但是随着互联网的出现,国家与国家之间要进行通讯,那么没有一个同一个的编码标准,沟通就没有可能。
unicode的出现就是解决编码不一致的问题,一个byte不够,那就2个,2个不够,那就3个,所以unicode就用了2个字节来表示字符,而且用的是16进制的格式,意味着范围从0000到FFFF,这是最粗暴但是有效的方法,例如彭字对应的就是5F6D,每一个字符都有独立对应的编码,那么就解决了了一个跨国交流的编码问题,所以unicode也称为万国码。
3.UNICODE的弊端
UNICODE只是一套标准,它是没有具体实现的,那么问题来了,你按Unicode来输入了3个字节给计算机,计算机怎么才能知道这3个字节代表的是3个字符,还是1个字符,还是2个字符呢,这都是有可能的,所以说有标准,还得有实现。
4.UTF8和UNICODE的关系
UTF8就是UNICODE的实现方法之一,用的是二进制,是可变长的,UTF32也是UNICODE的实现方法之一,只是两者所实现的方式不一样,UTF8的规则也很简单,规则有以下2条:
1.如果字符的utf8编码只有单个字节,那么它必定是以0开头,即0xxxxxxx,后面7位就是他的unicode码。
2.如果utf8的首个字节有n个1,那么接下来的n-1个字节都是用来一起表达该字符的,而且第一个字符的格式是以n个1+0的格式,而后面的字节都是以10为开头,然后把unicode码有高到底,依次填入。
假设我们现在要把彭字的unicode转换为utf8,5F6D就是0000 01001 0110 1101,那么对应的utf8就是
11100000 100100101 10101101