python基础篇——简单编码与解码的战争

python基础篇——简单编码与解码的战争


  hello!我是wakeyo_J,每天一个konwledge point,一起学python,让技术无限发散。

想必大家在日常的网络生活中,有时会遇到打开一些文件时出现不认识的“外星文”。
在这里插入图片描述

你是不是顿时就感觉头大了,反正我看到时是这样的!!!!
在这里插入图片描述
然后,是这样的!!!
在这里插入图片描述

1. 计算机的编码

  我们都知道,计算机只能识别0和1, 但是它是如何将我们输入的内容展示出来的呢?

在这里插入图片描述
从输入内容到计算机转变成0与1的代码就是编码,计算机内部有一个编码表进行一一对应。

2. 二进制

究竟什么是二进制呢?
【故事虚构】二进制的由来可追溯至三国时期,在三国中有一个牛人——诸葛亮,下面让我们的牛人诸葛亮来给大家讲讲二进制。
在这里插入图片描述
  诸葛亮派大将马谡驻守 街亭,诸葛亮叮嘱马谡:若魏军(曹操的军团)来100人,你就点亮1盏“孔明灯”通知我,我想清楚的知道魏国来了多少敌军,我好让人做好准备,才能搞定司马懿那厮。

  马谡这人以为自己很聪明,就装起叉来,对诸葛亮说:丞相我懂了,若敌人来了100人,我就放飞1盏孔明灯,若是敌人来了1000人,我就放飞10盏孔明灯;若敌人来10000人,我就放飞100盏孔明灯。。。。。。。。。

  诸葛亮听后差点一口老血就上来:你以为孔明灯那么好整?放飞那么多盏孔明灯,你知道需要多少money码?如今天下三分,我都是省吃俭用,你还这么浪费。

  马谡的铜铃大眼一转:丞相我懂了,敌人来一个,我就点亮一次,这样的话,就只需要1盏孔明灯了。

  这马谡一番深刻的理解,差点没把老诸给送走了,诸葛亮长叹了口气:幼常啊,你想一想,我都快50的人了,又经常熬夜挑灯夜读,近视得厉害,你认为我能够看清多少次,而且你这点来点去,万一出错了呢?

  马谡完全像作者遇到了“外星文”一样,问丞相:求答案。

  诸葛亮不忘摇摇毛扇冷静冷静:你的学学二进制,多安几盏孔明灯,你把它们放在街亭最高处,但注意,需要以同样得距离排列。

  还好马谡一个爱学习得娃:丞相,什么是二进制?

  诸葛亮:二进制,乃天人之学也,你只需排列好8盏灯,就可以将敌情准确上报。我就在西城找好位置泡着茶,边喝茶边按照定好得方位观察亮灯得位置,就可以胸有成竹,运筹帷幄了。
在这里插入图片描述
  马谡又蒙了:丞相,如果来的敌人太多了怎么办?

  诸葛亮:二进制,只有0和1,逢二进一,我们品是数数字0,1,2,3,4,5,6,7,8,9,10是十进制,二进制就是你数到2的时候,因为二进制只能使用0和1来表示,2就变成了10。来,你看下面这张对照表,到时候照着这个点灯就行了。
在这里插入图片描述
用来存放一个0或者1的位置,就是计算机中最小的储存单位,叫做【位】,外国名字叫【bit】,也叫做【比特】。我们规定8个比特构成一个【字节】(byte),字节是计算机里最常用的单位。
在这里插入图片描述
bit是位,byte是字节,1byte = 8bit。没听过位,也没听过字节,我只听过兆M,还有G。这些都是存储单位,它们之间的关系是这样的。

在这里插入图片描述
千兆宽带,其实说的是以比特每秒位单位,1000M就是 1000Mbit/s,而我们下载速度是以字节每秒位单位显示的,1byte = 8bit;1000M bit = 125M byte,也就是说千兆宽带,每秒下载速度最多125M。那我们的百兆宽带,下载速度也就只有十几兆了。

3. 编码表

  计算机开始发明的时候,用来解决数字计算问题。但是后来发现,只用二进制解决问题还是有限,怎么办呢?

  计算机这种东西最早由老外发明,外国人使用的英语只有26个字母,再加上标点、数字和一些符号也不会太多,老外搞出来一个东西叫做ASCII码,这个比二进制高级了一些。ASCII码组合出的256种状态,至此一个字节就使用满了。

  后来,计算机来到了中国,就出现大问题了,ASCII码最多表示256种状态,我们汉字千千万万, 256个远远不够啊。我们科学家就重新编写了一张编码表,叫做GB2312(word中有这种编码方式),它使用2个字节16个比特位,来表示绝大多数(65535)个汉字。后来,为了显示更多的汉字,又研究出一套编码,GBK编码。

  美国人有ASCII码,中国人有GB2312与GBK编码,那阿拉伯人呢?欧洲人呢?就像下面的乱码一样,这是咋形成的。就是美国人的编码到了我们中国,我们看不懂;中国人的编码到了欧洲,欧洲人看不懂。
在这里插入图片描述
  为了能够让全世界人民都能畅通的交流。Unicode应运而生。Unicode把所有语言都统一到一套编码里,可以容纳100多万个符号,这样就不会再有乱码问题了。好开森,大家终于可以愉快的玩耍了,但是由于把所有语言都统一到一套编码里中,就造成Unicode码越来越庞大。比如英文A,之前可以用00010001表示,但是到了Unicode码中,必须使用00000000 00010001来表示。

  于是,有人觉得太长了。太麻烦了。于是,科学家们又针对Unicode码研究出了一种可变长度字符编码,叫做UTF-8(8-bit Unicode Transformation Format),它可以根据不同的符号来变化字节长度。
在这里插入图片描述

4. 编码encode()与解码decode()

  • 编码encode就是把人类语言转成计算机语言。

  • 解码decode就是把计算机语言转成人类语言。

用法
在这里插入图片描述

print('编码'.encode('gbk'))
print('编码'.encode('utf-8'))
print(b'\xb1\xe0\xc2\xeb'.decode('gbk'))
print(b'\xe7\xbc\x96\xe7\xa0\x81'.decode('utf-8'))

效果:
在这里插入图片描述
字母‘b’,这是代表它是bytes(字节)类型的数据

print(type('编码'))
print(type(b'\xb1\xe0\xc2\xeb'))
print(type(b'\xe7\xbc\x96\xe7\xa0\x81'))

效果:
在这里插入图片描述

  • 计算机的编码,就是把字符串类型的数据,转换成bytes类型的数据。
  • 计算机的解码,就是把bytes类型的数据,转换成字符串类型的数据。

老骥伏枥,志在千里。烈士暮年,壮心不已。
在这里插入图片描述


总结

  本文属于作者原创,转载请注明出处,不足之处,希望大家能过给予宝贵的意见,如有侵权,请私信。每天一个knowledge point,一起学python,让技术无限发散

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python独角兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值