Python学习(3):理解计算机中编码

我们学习Python编程,经常对字符串这样的数据进行处理。我们也都知道计算机内部信息是采用二进制编码的,那么这其中的处理原理是什么呢?本篇就计算机中关于编码的知识进行总结。

一、为什么计算机内部信息采用二进制编码

计算机是由逻辑电路组成的,而逻辑电路只有接通与断开两个状态,正好可以对映二进制的“1”与“0”。这样的计算机设计在技术上会简单许多。

二、计算机编码的由来

计算机内部信息采用二进制编码,这决定了它只能直接识别0和1。我们所有各类型数据也都需要被转换为二进制0和1的序列存放在计算机中的。但是这样就产生了问题,对于一个很长的二进制序列,我们很难理解它的含义。

因此,我们可以规定每个字符的二进制序列,并把它存在计算机内,当需要将二进制位转换成我们能看懂的字符数据时,让计算机去截取二进制位查找对应的表,翻译成我们看的懂的数据。这种规定字符的二进制序列的做法就是一种编码行为,让计算机翻译就是一种解码行为。

这样也就产生了各种我们常见的计算机编码,如:ASCll编码、UTF-8编码、unicode编码等。

三、认识常见的计算机编码

1.ASCll编码

计算机是由美国人发明的,他们设计的Ascll编码是基于罗马字母表的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。英语只有26个英文字母,所以ascll编码只用8位二进制就表示了所有他们需要的字符。ASClll也是现今最通用的单字节编码系统。但是我们的汉字有几万个之多,ASCll编码并不能完全适用,所以后来我们也创造了适合中文的编码方式。
这里写图片描述
在计算机的存储中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

2.ISO 8859-1/Windows-1252

ISO 8859-1编码
ASCll编码的一个字节并未用完,后来的欧洲国家为了增加它们经常使用的字符,就在原ASCll编码的基础上扩充进而创造了ISO 8859-1编码,又称西欧语言。

Windows-1252编码
Windows-1252编码是ISO-8859-1编码的超集,现在的HTML5规范中就要求 ISO-8859-1 的文档实际上用 Windows-1252 编码进行分析。

3.GB2312编码(简体中文)与GBK编码

汉字众多,一个字节长度的编码显然不适合,所以我国在1981年5月1日开始实施的一套国家标准GB2312,适用于汉字处理、汉字通信等系统之间的信息交换。

GB2312使用两个字节来表示汉字。小于127的依然表示原来的字符(也就是该字节最高位为0),当计算机遇到两个大于127的字节时候(也就是两个字节的最高位都是1),就一次性读取两个字节,将它解码成一个汉字。
GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

4.GBK与GB18030

GB2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但是对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB18030汉字字符集的出现。

GBK:向下兼容GB2312,增加新的汉字,共收录了21003个汉字。
GB18030:再次对GBK的扩充,增加了日韩和少数民族的字符编码。

5.unicode编码

如果每个国家都按照自己的标准编码字符集,就会对编码不同的两个国家的交流造成很困难。为了统一所有文字的编码,Unicode应运而生。

但是,UNicode仅仅只是一个字符集,就是为每个字符规定一个用来表示该字符的二进制数字,至于这个二进制代码如何存储则没有任何规定。试想,如果按照汉字所需的2到4个字节来编码,那么英文文档的大小也就大出了1到3倍。

为了解决Unicode编码的问题,UTT-8和UTF-16以及UTF-32出现了。
UTF-8是目前互联网上使用最广泛的一种 Unicode 编码方式,它的最大特点就是可变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度

UTF-16编码介于 UTF-32 与 UTF-8 之间,同时结合了定长和变长两种编码方法的特点。

四、参考文章:

1.彻底弄懂Unicode编码
2.Unicode 和 UTF-8 有何区别?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值