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


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


简单编码与解码之战

  • python基础篇——简单编码与解码的战争
  • 1. 计算机的编码
  • 2. 二进制
  • 3. 编码表
  • 4. 编码encode()与解码decode()
  • 总结

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

你是不是顿时就感觉头大了,反正我看到时是这样的!!!!

然后,是这样的!!!

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,让技术无限发散

python基础篇——简单编码与解码的战争相关推荐

  1. python基础一:编码和解码

    编码和解码 python2的解释器加载py文件时会对文件内容编码放到内存中,默认用ascii编码 python2中的代码存储在硬盘上是ascii编码 python3代码在内存中运行时是unicode编 ...

  2. Python 基础篇-简单的异常捕获

    try 后面就是要捕获的异常代码,当它出现异常时,我们就能捕获到它. 当出现异常时就会走 except 这个分支. # 如果出现异常,打印异常e try:... except Exception as ...

  3. 【算法思想】Reed-Solomon 纠错编码基础概念,编码、解码算法原理、数学公式 Python代码实现

    [算法思想]Reed-Solomon 纠错编码基础概念,编码.解码算法原理.数学公式 & Python代码实现 文章目录 [算法思想]Reed-Solomon 纠错编码基础概念,编码.解码算法 ...

  4. 面试题之第一部分(Python基础篇) 80题

    第一部分(python基础篇)80题 为什么学习Python?==*== # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相 ...

  5. python包括哪些部分_第一部分 Python基础篇

    第⼀一部分 Python基础篇 1. 为什什么学习Python? 朋友推荐,比较简单易学,生态圈比较强大 发展趋势:人工智能.数据分析 2. 通过什什么途径学习的Python? 廖雪峰.网络博客.相关 ...

  6. pythondd_工程脚本插件方案 - c集成Python基础篇

    工程脚本插件方案 - c集成Python基础篇 序: 为何要集成脚本,怎样在工程中集成Python脚本. 在做比较大型的工程时,1般都会分核心层和业务层.核心层要求实现高效和稳定的基础功能,并提供调用 ...

  7. python url解码_对python中url参数编码与解码的实例详解

    一.简介 在python中url,对于中文等非ascii码字符,需要进行参数的编码与解码. 二.关键代码 1.url编码 对字符串编码用urllib.parse包下的quote(string, saf ...

  8. Python基础之简单用户交互

    Python基础之简单用户交互 一.要求及目的 二.代码内容 三.学习总结 一.要求及目的 要求设计一个简单的计算程序 二.代码内容 # 简单计算 a = input("please inp ...

  9. python中的URL编码和解码

    python中的URL编码和解码:test.py 1 # 引入urllib的request模块 2 import urllib.request 3 4 url = 'https://www.douba ...

  10. 经典Python面试题之Python基础篇

    Python基础篇 1. 为什么学习Python? 2. 通过什么途径学习的Python? 3. Python和Java.PHP.C.C#.C++等其他语言的对比? 4. 简述解释型和编译型编程语言? ...

最新文章

  1. 深入理解YouTube推荐系统算法!
  2. 【统计学习方法】朴素贝叶斯对鸢尾花(iris)数据集进行训练预测
  3. Effective Java 读书笔记----第三章
  4. 第二章 数据类型和文件操作
  5. Spring 为啥默认把 bean 设计成单例的?
  6. mysql 平均值 排序_MySQL按平均两个平均值排序
  7. 字符串获取类、封装检测数字的方法
  8. 数据结构 5-3-3 二叉树的线索化
  9. 60名英语专八的半年苦战:机器智能背后有一群“数字工人”
  10. 论文笔记_S2D.51_2016-IEEE TOR_Past, Present, and Future of Simultaneous Localization and Mapping
  11. 唯一解的数独题目生成器——理解回溯法
  12. 2022年Web前端开发流程和学习路线(详尽版)
  13. 国土档案管理信息系统【档案著录】-地籍类档案著录
  14. Ora-12514原因及处理方法
  15. elastix2.5vtigercrm5.2.1来电弹屏和点击呼叫的配置
  16. html中创建表格在正上方的表格标题
  17. 【量化笔记】Markowitz均值-方差模型
  18. xlrd.biffh.XLRDError: Excel xlsx file; not supported 。我也来蹭一下热度~
  19. 哇!這就是青春痘(上)
  20. 代码混淆之class-winter

热门文章

  1. 算法面试题_求给定字符串的排列、组合、八皇后问题
  2. SLAM基础_什么是ORB特征,怎么计算的?
  3. 眼底图像血管增强与分割--(1)匹配滤波算法原理及实现
  4. 【Java例题】7.5 文件题2-学生成绩统计
  5. Python虚拟机之if控制流(一)
  6. 使用git配合idea使用oschina代码仓库初级教程
  7. 关于Acess 图片存为ole类型,数据集合显示
  8. VB计算圆周率(二)
  9. [导入]表单确认按钮——Javascript函数
  10. 深度强化学习调度研究的心路历程