ASCII码、GBK、unicode、utf-8的关系和区别。

引言,计算机只能识别0和1。那么像让计算机为我们所用,我们就必须发出0和1组成的一系列指令。比如:010010111。但是我们人类的言语并不是这种01000101这种序列。

美国人说英文:hello,morning,$等。美国人的言语组成差不多是abcd......uvwxyz和一些特殊的字符@#$。这样的符号有128个。符号这里我们称作字符。如何将这128个字符转化成与计算机里面一一对应。美国人发明了ASCII码。计算机常识告诉我们一个字节是由八位0和1组成的序列。11111111==256。这意味着八位的0和1可以表示256个美国的字符。0111111==128。这意味着半个字节可以表示128个美国的字符。那么因为美国人的语言只有128个字符。那么我们将这128种0和1组成的序列和128个字符一一对应起来。就形成了一种叫做ASCII码的东西。

 

那么问题来了,中国的汉字可不止128个。我们的汉语字段里面有几万个汉字,也就是我们要表示汉字里面几万个字符。一个字节8位才能表示256个字符。那么两个字节呢?也就是11111111  11111111=2的16次方=65536.可以表示6万多个字符。。。那么我们再制作一个这样的表,使得每个汉字对应着一个2个字节的0和1组成的序列。那么这样的一张大表就被称作GBK码表。

在中国,我在屏幕段可以输入abc,也可以输入“我爱你中国”,那么计算机如何确定是读入一个字节还是两个字节呢?首先看第一位是不是0,要是0的话就当做ASCII码来读,如果不是的话,就读入两个字节。(查GBK表)

那么问题又来了,这个世界不止有说英文和说中文的国家。如果每个国家都自创一个码表,不通语言之间实现转换很困难。我用ASCII编码发邮件,你用GBK解码。这样解码会改变它原来表达的意思。

 

于是国际组织就发明了一套公用的表unicode编码,将所有国家,所有字符都收进去从0到100多万(用三个字节表示2的24次方)

虽然世界通用的表unicode是有了,但是有人发现这有点浪费资源啊。每次让计算机读取三个字节然后参照unicode表解码,那么像a,b,c,0,1这些一个字节就够了,就很浪费空间。

于是utf-8,utf-16,utf-32这些编码方案就出现了。utf-16是用两个字节来编码所有的字符,utf-32是使用4个字节来编码所有的字符。utf-8是为了节约资源,采用变长的编码,编码长度是从1个字节到六个字节不等。

由于互联网大部分是一个字节(代码很多是英文的,主要是代码是说英文国家发明的),所以大家选择用的最多的还是utf-8。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值