python 的编码方式

🌞欢迎来到python的世界 
🌈博客主页:卿云阁 

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年4月3日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

🍈 一、⼆进制运算

 🍉二. 字符编码

🍊三,GB2312 & GBK

🍋四、Unicode和UTF-8

🍇图片、声音、视频在计算机中是如何存储的

🍈 一、⼆进制运算

计算机是靠电流驱动的,科学家们是如何做到让电流能理解数字、⽂字、图⽚等⼈类语⾔的呢?
       科学家发现,可以通过控制电压把电流分成高电压、低电压, 高电压可以代表⼀种状态,低电压⼜可代 表另⼀状态。这样计算机就可以识别2 种状态了。 就像⼀个灯泡,开灯可以代表 1 ,关灯可以代表 0 ,就 是2 种状态 。如果多个灯泡的组合,就可以表达更多的值啦。这跟数学⾥的⼀个叫⼆进制的东东很像, ⼆进制只有0 1 两个数,想表达更⼤的值 就往左补位,多个 0101010 就可以表达更⼤的值 啦。 ⼆进制 是逢2 1 , 跟我们用的⼗进制逢 10 1 ⼀个原理。 于是科学家们,就⽤ 2 进制做为计算机可识别的最底层语言啦。


 🍉二. 字符编码

我们自己强行约定了⼀个表,把⽂字 和数字对应上,这张表就相当于翻译,我们可以拿着⼀个数字来对比对应表找到相应的文字,反之亦然。

ASCII 编码

⼀个空格对应的数字是0 翻译成⼆进制就是0(注意字符'0'和整数0是不同的)
⼀个对勾√对应的数字是251 翻译成⼆进制就是11111011
假如我们要打印两个空格⼀个对勾 写作⼆进制就应该是 0011111011 , 但是问题来了,我们怎 么知道从哪⼉到哪⼉是⼀个字符呢?
       正是由于这些字符串⻓的⻓,短的短,写在⼀起让我们难以分清每⼀个字符的起⽌位置,所以聪明的⼈ 类就想出了⼀个解决办法,既然⼀共就这255 个字符,那最⻓的也不过是 11111111 ⼋位,不如我们就把所有的⼆进制都转换成8 位的,不⾜的⽤ 0 来替换。 这样⼀来,刚刚的两个空格⼀个对勾就写作000000000000000011111011 ,读取的时候只要每次读 8 个 字符就能知道每个字符的⼆进制值啦。
计算机容量单位
bit 位,计算机中最⼩的表示单位
8bit = 1bytes 字节,最⼩的存储单位,1bytes缩写为1B
1KB=1024B 
1MB=1024KB 
1GB=1024MB # 电影
1TB=1024GB # 移动硬盘
1PB=1024TB 
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB

🍊三,GB2312 & GBK

英⽂问题是解决了, 我们中⽂如何显示呢? 美国佬设计 ASSCII 码的时候应该是没考虑中国⼈有⼀天也 能⽤上电脑, 所以根本没考虑中⽂的问题,上世界80 年代,电脑进⼊中国,把砖家们难倒了,妈的你 个⼀ASSCII 只能存 256 个字符,我常⽤汉字就⼏千个,怎么玩???勒紧裤腰带还苏联贷款的时候我们 都挺过来啦,这点⼩事难不到我们, 既然美帝的ASCII 不⽀持中⽂,那我们⾃⼰搞张编码表不就⾏了, 于是我们1980 年设计出了 GB2312 编码表,⻓成下⾯的样⼦。⼀共存了 6763 个汉字。

        这个表格⽐较⼤,像上⾯的⼀块块的⽂字区域有 72 个,这导致通过⼀个字节是没办法表示⼀个汉字的 (因为⼀个字节最多允许 256 个字符变种,你现在 6 千多个,只能 2 个字节啦, 2**16=65535 个变种 ) 。 有了gb2312 ,我们就能愉快的写中⽂啦。
      但我们写字竟然会出现中英混杂的情况,⽐如 我是路⻜学城,我的英⽂名叫 Luffffycity.” , 这种你怎么 办?这就要求你必须在gb2312 ⾥同时⽀持英⽂,但是还不能是 2 个字节表示⼀个英⽂字⺟。⼈家 ASCII ⽤⼀个字符,你⽤2 个,那⼀个 2mb ⼤⼩的英⽂⽂档只要⼀改编码,就⽴刻变成 4mb, 太坑爹,中国⼈你 有钱也不能这么造呀。 所以中国砖家们⼜通过神奇⼿段兼容了ASSCII, 即遇到中⽂⽤ 2 个字节,遇到英⽂ 直接⽤ASCII 的编码。怎么做到的呢?
如何区别连在⼀起的 2 个字节是代表 2 个英⽂字⺟,还是⼀个中⽂汉字呢? 中国⼈如此聪明,决定, 2 个字节连在⼀起,且每个字节的第 1 ( 也就是相当于 128 的那个 2 进制位 ) 如果是 1 ,就代表这是个中 ⽂,这个⾸位是 128 的字节被称为⾼字节。 也就是 2 个⾼字节连在⼀起,必然就是⼀个中⽂。

你怎么如 此笃定?因为0-127 已经表示了英⽂的绝⼤部分字符, 128-255 ASCII 的扩展表,表示的都是极特殊的 字符,⼀般没什么⽤。所以中国⼈就直接拿来⽤了。 ⾃1980 年发布 gb2312 之后,中⽂⼀直⽤着没啥问题,随着个⼈电脑进⼊千家万户,有⼈发现,⾃⼰的 名字竟然打印不出来,因为起的太⽣僻了。 于是1995 年, 砖家们⼜升级了 gb2312, 加⼊更多字符,连什么藏语、维吾尔语、⽇语、韩语、蒙古语 什么的统统都包含进去了,。 这个编码叫GBK ,⼀ 直到现在,我们的windows 电脑中⽂版本的编码就是 GBK.
编码战国时代
很多国家都有自己的编码
解决乱码:
1. 中国电脑 上装⽇本 shift_jis
2. 让⽇本 游戏⼚商,⽤ gbk 编码
中国⼈在搞⾃⼰编码的同时,世界上其它⾮英语国家也得⽤电脑呀,于是都搞出了⾃⼰的编码,你可以 想得到的是,全世界有上百种语⾔,⽇本把⽇⽂编到Shift_JIS ⾥,韩国把韩⽂编到 Euc-kr ⾥, 各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语⾔混合的⽂本中,显示出来会有乱 码。之前你从玩个⽇本游戏,往⾃⼰电脑上⼀装,就显示乱码了。
这么乱极⼤了阻碍了不同国家的信息传递,于是联合国出⾯,发誓要解决这个混乱局⾯。
因此, Unicode 应运⽽⽣。 Unicode 把所有语⾔都统⼀到⼀套编码⾥,这样就不会再有乱码问题了。

🍋四、Unicode和UTF-8

Unicode 2-4 字节 已经收录 136690 个字符,并还在⼀直不断扩张中
Unicode 标准也在不断发展,但最常⽤的是⽤两个字节表示⼀个字符(如果要⽤到⾮常偏僻的字符,就 需要4 个字节)。现代 操作系统 和⼤多数编程语⾔都直接⽀持 Unicode
Unicode 2 个特点:
1. ⽀持全球所有语⾔
2. 可以跟各种语⾔的编码⾃由转换,也就是说,即使你 gbk 编码的⽂字 ,想转成 unicode 很容易。 为何unicode 可以跟其它语⾔互相转换呢? 因为有跟所有语⾔都有对应关系哈,这样做的好处是可以让 那些已经⽤gbk或其它编码写好的软件容易的转unicode 编码 ,利于 unicode 的推⼴。 下图就是成unicode跟中⽂编码的对应关系新的问题⼜出现了:如果统⼀成Unicode 编码,乱码问题从此消失了。但是,如果你写的⽂本基本上全 部是英⽂的话,⽤Unicode 编码⽐ ASCII 编码需要多⼀倍的存储空间,由于计算机的内存⽐较⼤,并且 字符串在内容中表示时也不会特别⼤,所以内容可以使⽤unicode 来处理,但是存储和⽹络传输时⼀般 数据都会⾮常多,那么增加1 倍将是⽆法容忍的!!! 为了解决存储和⽹络传输的问题,出现了Unicode Transformation Format ,学术名 UTF ,即:对
unicode 字符进⾏转换,以便于在存储和⽹络传输时可以节省空间 !
UTF-8 : 使⽤ 1 2 3 4 个字节表示所有字符;优先使⽤ 1 个字节、⽆法满⾜则使增加⼀个字节,
最多 4 个字节。英⽂占 1 个字节、欧洲语系占 2 个、东亚占 3 个,其它及特殊字符占 4
UTF-16 : 使⽤ 2 4 个字节表示所有字符;优先使⽤ 2 个字节,否则使⽤ 4 个字节表示。
UTF-32 : 使⽤ 4 个字节表示所有字符;
总结: UTF 是为 unicode 编码 设计 的⼀种 在存储 和传输时节省空间的编码⽅案。
如果你要传输的⽂本包含⼤量英⽂字符,⽤ UTF-8 编码就能节省空间:

UTF-8 编码有⼀个额外的好处,就是 ASCII 编码实际上可以被看成是 UTF-8 编 码的⼀部分,所以,⼤量只⽀持ASCII 编码的历史遗留软件可以在 UTF-8 编码下继续⼯作。
搞清楚了 ASCII Unicode UTF-8 的关系,我们就可以总结⼀下现在计算机系统通⽤的字符编码⼯作⽅式:
在计算机内存中,统⼀使⽤ Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF-8 编 码。 ⽤记事本编辑的时候,从⽂件读取的UTF-8 字符被转换为 Unicode 字符到内存⾥,编辑完成后,保存的 时候再把Unicode 转换为 UTF-8 保存到⽂件

🍇图片、声音、视频在计算机中是如何存储的

 

 

 

 

 

 以上图片选自字符、图像、声音、视频在计算机中的编码_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Gv411w7cE/?spm_id_from=333.788.recommend_more_video.0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卿云阁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值