了解编码问题 ASCII UNICODE UTF-8...

ASCII GBK UNICODE

对于计算机来说,只会识别机器码0101这样的东西,如何才能让他输出我们需要的字母、数字、汉字等内容呢?这就需要用到编码。

先说说字节,字节是计算机存储的最小单位,1个字节代表计算机的8位0101xxxx这样的空间,因为每一位有0和1两种选择,因此,一个字节最多能表示的8位序号有2的8次方即256种。

对于ASCII编码来讲,它可以把字母、数字、一些符号通过0101的形式编好序号,因为这些字母数字等最多不超过128种,因此一个字节就可以把这些字母数字都编好序号。
比如字母a的编号为0 110 0001,当计算机识别到这串编号,就可以通过显示器把它通过ASCII找到对应的a并输出。

同样的,GBK是在ASCII上增加了汉字的一种编码,因为汉字比较多,1个字节无法满足编号要求,2个字节即2的16次方(65536)种编号才够使用。

UNICODE则是对全世界所有语言进行编号,目前有两种,一种是UCS2即2个字节表示,另一种是UCS4是4个字节表示(比UCS2多了一些特殊的元素如各种表情等),现在unicode一般指的是UCS4。

UTF-8

UTF即Unicode Transform Format 是UNICODE的一种转换形式,-8表示最少为8位进行表示,utf-8是一种可变长度的编码。具体什么含义呢?

比如说,你要表示一个字母,8位就可以表示,如果用没转换过的Unicode进行编码,假如是UCS4就需要4个字节32位表示,那么前面24位就都是0,这样其实浪费了3个字节的空间。所以UTF-8对UCS4压缩后,英文占用1个字节,中文占3个字节。

因此,在网络上传输时,一般都是通过utf-8进行传输,既能保证世界范围内通用,又可以节省空间。当然,如果是中文环境的话,因为中文2个字节就可以表示完,使用utf-16或者GBK一般会更省空间。比如“我爱你!”,3者占用:
使用gbk,占用32+1=7个字节;
使用utf-8,占用3
3+1=10个字节;
使用utf-16,占用4*2=8个字节。

乱码

了解了上面的编码内容,就很容易可以理解出现乱码的原因,就是编码与解码的方式不一致导致的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值