字符集与编码

本文详细解释了ASCII字符集、GBK字符集以及Unicode字符集(包括UTF-8和UTF-32)的概念,探讨了字符编码在不同国家和场景下的应用,以及如何解决存储和传输效率问题。
摘要由CSDN通过智能技术生成

经常听到unicode编码、unicode字符集……这些概念搞得我头大!遂将其梳理了一遍,并整理成文。

首先得明白字符集是字符集,编码是编码,字符集有各自的编码方式!国人经常接触到的字符集有标准ASCII字符集、GBK字符集、Unicode字符集。

我们都知道计算机底层采用二进制的形式对数据进行存储,而计算机是美国佬发明的,美国佬需要用到哪些字符呢?无非就是字母、数字、标点和特殊字符,共128个字符。使用ascii字符集就可以将其囊括。那么ascii字符集是如何进行编码的呢,如下:

字符码点将码点编码为二进制数据
字符0480011 0000
字符1490011 0001
字符2500011 0002
字符9570011 1001
删除1270111 1111

将字符对应码点,再将码点编码为二进制数据,这样就可以实现将ascii字符集全部存储到计算机当中。

但是注意127的二进制形式为1111111,我们发现这128个ascii字符的二进制存储根本用不到8个位,但是计算机最少存1个字节(8个位),因此人为的在ascii字符集的二进制编码前补0,所以首位为0也就是ascii字符集二进制编码的特性,剩下的7位则刚好可以表示128个字符。

当计算机传入我国,ascii字符集在我国庞大的汉字库面前,显然是不够看的,因此我们自己搞了个字符集,即GBK,也就是我们常说的国标,它兼容ascii字符集,在GBK中,英文、数字等仍然采用1个字节存储,汉字则采用两个字节存储,接下来我们思考如下场景:
对“我a你”进行二进制编码,按照GBK的规矩,汉字2字节,英文1字节,其编码形式就应该是:
xxxxxxxx xxxxxxxx 0xxxxxxx xxxxxxxx xxxxxxxx,但是这种形式的二进制数据在计算机底层该如何进行划分呢?为了解决这个问题,GBK中规定,汉字编码的第一个字节的首位必须是1,于是“我a你”的编码形式就应该是:1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx,怎么划分的问题就完美解决了。关于GBK编码大家可能还听说过GB2312字符集、 GB18030字符集,不用太纠结,下面直接给出它们之间的关系:GB2312兼容ASCII、GBK兼容GB2312、GB18030兼容GB2312和GBK,其实就是一个简单的包含关系而已,这里给出一个GBK码位分布图链接,如下:https://www.cnblogs.com/mfmdaoyou/p/6915081.html

随着计算机传入各个国家,每个国家都有自己的字符集和编码方式,这就造成了编码的混乱,此时ISO提出了解决方案,编订了Unicode(万国码),最初Unicode字符集采用UTF-32的编码方式,即采用固定4个字节表示一个字符,显然,这十分浪费存储空间,而且造成数据传输速率变慢,于是UTF-8这种编码方式应运而生,它是一种可变长的编码方案,共有四个长度区,分别是1字节、2字节、3字节和4字节,规定英文和数字占1字节,汉字占3字节,UTF-8中针对不同的长度区,有不同的编码方式,因此不同字符编码为二进制数据后是可区分的。下面给出UTF-8编码方式:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值