Day 13 20190128 老男孩python学习第13天 内容整理

 

 

视频看了5个小时

 

二进制 bin()

八进制 oct()

十六进制 hex()

 

因为二进制不易观察,所以使用十六进制便于观察, 1-9, abcdef,共15个

 

4个二进制对应一个16进制

 

ASCII 码表最低表示字符的单位是8bit,即1byte,8 bit = 2 * hex,2个十六进制位可以表示一个byte(字节),4个bit对应一个十六进制数

 

 

unicode占用了2-4个字节,虽然收录了几乎所有的语言,但是由于占体积太大,相比ASCII的1个字节,体积大了一倍多。

 

支持语言多是优势,体积大是劣势。

 

unicode不仅支持所有国家语言,同时包含了跟其他国家语言的映射关系。

 

体积大在存储,网络传输之类的作用上面影响很大,因此unicode不适合用于存储或者网络传输,但是在内存上读取时仍旧可以接受,因为内存速度快,而且一般使用的程序或者文件体积相对不大,影响不大

 

 

 

因而产生了unicode transformation format,即UTF,以便于在存储或者网络传输中节省空间,

 

  • UTF-8,英文依旧只占一个字节,欧洲语言占两个字节,东亚语言占三个字节,特殊字符等最多占4个字节。

 

  • UTF-16,使用2个或者4个字节表示一个字符,优先使用2个字节,否则使用4个字节表示,

 

  • UTF-32,使用4个字节表示所有字符。

 

UTF是为unicode在字符占用方面做出了优化的结果。

 

 

无论是以什么编码存储,最后都是二进制数,而在不同编码如ASCII,GBK,韩国,泰国,日本等等方式是不同的,对应的映射关系是不同的。

 

以GBK方式存储成二进制,再转回来读取时依旧以GBK的方式转回去,GBK相当于一个密码解释表,一串字符以GBK的规则进行解释,结果为一串二进制,倒过来解释时还是要用GBK。

 

 

虽然有一个万国语言unicode,但是大家不买账,各自还是使用各自的编码,中文window依然是GBK编码,而不是Unicode,所以当你用中文系统或者中文进行编程的时候,是使用的GBK编码,出口到国外时就会出现编码的不符合的问题,除非:

 

1. 外国终端装了GBK编码,几乎不可能。

2. 把GBK在存储的时候转换成为UTF-8,然后最后从存储读取时就变为Unicode,外国终端虽然不支持GBK,但是支持Unicode,比较可行。而且一次安装,包括其他语言终生使用。

 

当然了,转换成为Unicode之后,语言还是中文,只是可以运行了。

 

新开发的软件直接用UTF-8编码即可,但是老的GBK的软件就不太友好,这时候就可以使用Unicode的映射关系来进行代码的转换,GBK的编码转换成为Unicode,然后再通过Unicode转换成为UTF-8,这样就可以直接用老的GBK编码的软件。

 

“路”字在GKB代码是G0-4237,转换成Unicode就变成了8DEF,

 

Python执行代码的过程:

 

Python3里面,内存里字符串都是Unicode,不管你是GBK、UTF-8、ASCII等,执行的时候内存里字符串都是Unicode,默认读取文件的编码是UTF-8,

 

第一步,按文件头的注释加载编码方式,转成Unicode(对于初始读取文件时,文件就相当于一串字符串)

第二步,把代码按照语法规则进行解释,即语法分析

第三步,所有的字符都会以Unicode进行运行。(右下角会有编码的显示)

 

 

一个以UTF-8进行编写的代码,在windows上(GBK)环境下,运行就会变成乱码,因为字符在UTF-8和GBK的映射关系是不同的,运行就会变成乱码。

 

python3在读取UTF-8格式的代码的时候,自动转成了unicode,在内存中加载,因此在GBK的windows环境下运行有时不会出错。

 

而python2的字符串的默认编码是ASCII,不会自动转成unicode,在内存中仍旧是GBK或者是ASCII,当编码不同时就会出现乱码。

 

而python3相当于是python2多了一个手动转的过程,变成了unicode,

 

这个过程就叫 s2 = s.decode('UTF-8') --> 变成unicode,UTF-8是表示之前的编码,通过声明之前的代码规则,来进行转换,否则不知道规则不能转

s3 = s2.encode('GBK') --> 变成GBK,

 

type(s2) --> unicode

type(s3) --> str

 

这些都是py2里面的类型,unicode类型和str类型,

 

 

py3,文件默认是UTF-8,

  字符串是unicode(不变),

 

py2,文件默认编码是ASCII,

  字符串默认编码是ASCII,

  如果文件头声明是GBK,字符串就是GBK

  有个数据类型叫unicode

 

中文在UTF-8中是3个字节,GBK占2个字节,有时通过字节长度可以分辨出编码的方式。

 

 

最后的unicode的字节8def就可以查到“路”在unicode中的编码对应位,看到对应GBK的编码位置为G0-4237,

将8d转换成二进制码,然后去除头上一位,剩下的就是42

总而言之是一一对应的。

 

为什么呢?

因为ASCII中128位以后的字符很少使用,因此中文GBK把后面的128位利用起来,并规定128以上为高字节,128以下为低字节,如果2个128以上的高字节字符连在一起就是表示中文,否则表示英文。

 

内存里都是010101存,而用16进制显示是为了方便,其实还是二进制,

 

这个叫二进制串儿,叫bytes类型(即表示位置),而对应的“路飞”两个字是字符串(表示图形),在python3里面是一样的。

bytes == str

概念上不同,但是实际上是一样的。

 

那如何定义一个bytes呢,s2 = b"路飞",bytes就是字符串,那为什么要还有bytes类型呢,既然它就是str,

 

为什么相同呢,因为有编码表,所以根据bytes就找到了str(字形),但是图片是没有对应编码的,

 

因此为了表示图片、视频等等,有了bytes来表示图片,而不是字形,它是纯二进制,没有对应的字形,它有十六进制的码,但是如果print()它的话,python会尝试使用编码去寻找对应关系的字形,因此最后生成的就是乱码。

 

除了bytes和str外,python还有一个unicode类型,统称都叫字符串,s = u"路飞",这个就是unicode类型的字符串,是为了支持全球,

 

然后总体简单来说,字符串有3种,bytes、str、unicode三种,

 

这些都是python2!!!!!!!!!!!

 

在python2中,文件头以UTF-8,GBK。。。编码的代码,代码内容加载到内存,并不会被自动转换成unicode,依然是UTF-8,GBK。。。

在python3中,以UTF-8,GBK。。。编码的代码,代码内容加载到内存,就都会被自动转换成unicode,整体都是unicode,整个代码都是,

 

那样python3就默认就支持全球化了。

 

python3中依然可以写 s = u"路飞",但是事实上只有str一个类型了。

 

能不能正常展示,关于编码的原因就以下4个:

 

 

最后,千万别瞎转编码,转不回来!!!

 

转载于:https://www.cnblogs.com/Jack1314/p/10331508.html

├ │ ├ │ │ ├01 python s14 day1 开课介绍.avi │ │ ├02 python s14 day1 开课介绍2.avi │ │ ├03 python s14 day1 开课介绍3.avi │ │ ├04 python s14 day1 开课介绍4.avi │ │ ├05 python s14 day1 python发展介绍.avi │ │ ├06 python s14 day1 第一个python程序.avi │ │ ├07 python s14 day1 变量.avi │ │ ├08 python s14 day1 字符编码与二进制.avi │ │ ├09 python s14 day1 字符编码的区别与介绍.avi │ │ ├10 python s14 day1 用户交互程序.avi │ │ ├11 python s14 day1 if else流程判断.avi │ │ ├12 python s14 day1 while 循环.avi │ │ ├13 python s14 day1 while 循环优化版本.avi │ │ ├14 python s14 day1 for 循环及作业要求.avi │ │ └day1.zip │ ├ │ │ ├01 python s14 day2 本节鸡汤.avi │ │ ├02 python s14 day2 模块初识.avi │ │ ├03 python s14 day2 模块初识2.avi │ │ ├04 python s14 day2 pyc是什么.avi │ │ ├05 python s14 day2 python数据类型.avi │ │ ├06 python s14 day2 bytes数据类型.avi │ │ ├07 python s14 day2 列表的使用.avi │ │ ├08 python s14 day2 列表的使用2.avi │ │ ├09 python s14 day2 元组与购物车程序练习.avi │ │ ├10 python s14 day2 购物车程序练习实例.avi │ │ ├11 python s14 day2 字符串常用操作.avi │ │ ├12 python s14 day2 字典的使用.avi │ │ ├13 python s14 day2 三级菜单实例.avi │ │ ├14 python s14 day2 本周作业-购物车优化.avi │ │ └s14day2_code.zip │ ├ │ │ ├day3-code.zip │ │ ├oldboy-10.avi │ │ ├oldboy-11.avi │ │ ├oldboy-12.avi │ │ ├oldboy-13.avi │ │ ├oldboy-14.avi │ │ ├oldboy-15.avi │ │ ├oldboy-16.avi │ │ ├oldboy-17.avi │ │ ├oldboy-18.avi │ │ ├oldboy-19.avi │ │ ├oldboy-20.avi │ │ ├oldboy-21.avi │ │ ├oldboy-22.avi │ │ ├oldboy-23.avi │ │ ├oldboy-24.avi │ │ ├oldboy-25.avi │ │ ├oldboy-26.avi │ │ ├oldboy-27.avi │ │ └oldboy-9.avi │ ├ │ │ ├day4.zip │ │ ├oldboy-1.avi │ │ ├oldboy-10.avi │ │ ├oldboy-11.avi │ │ ├oldboy-12.avi │ │ ├oldboy-13.avi │ │ ├oldboy-14.avi │ │ ├oldboy-15.avi │ │ ├oldboy-16.avi │ │ ├oldboy-17.avi │ │ ├oldboy-18.avi │ │ ├oldboy-2.avi │ │ ├oldboy-3.avi │ │ ├oldboy-4.avi │ │ ├oldboy-5.avi │ │ ├oldboy-6.avi │ │ ├oldboy-7.avi │ │ ├oldboy-8.avi │ │ └oldboy-9.avi │ ├ │ │ ├day5.zip │ │ ├oldboy-1.avi │ │ ├oldboy-10.avi │ │ ├oldboy-11.avi │ │ ├oldboy-12.avi │ │ ├oldboy-13.avi │ │ ├oldboy-14.avi │ │ ├oldboy-2.avi │ │ ├oldboy-3.avi │ │ ├oldboy-4.avi │ │ ├oldboy-5.avi │ │ ├oldboy-6.avi │ │ ├oldboy-7.avi │ │ ├oldboy-8.avi │ │ └oldboy-9.avi │ ├ │ │ ├01 本节小鸡汤(电影分享).avi │ │ ├02 面向对象介绍.avi │ │ ├03 面向对象特性介绍.avi │ │ ├04 实例演示opp编程好处.avi │ │ ├05 实例变量与类变量.avi │ │ ├06 类变量的作用及析构函数.avi │ │ ├07 类的继承.avi │ │ ├08 类的继承2.avi │ │ ├09 经典类与新式类的继承顺序.avi │ │ ├10 继承实例讲解.avi │ │ ├11 多态实例讲解.avi │ │ ├12 本节作业之选课系统开发.avi │ │ └day6.zip │ ├ │ │ ├day7.zip │ │ ├oldboy-1.avi │ │ ├oldboy-10.avi │ │ ├oldboy-11.avi │ │ ├oldboy-12.avi │ │ ├oldboy-13.avi │ │ ├oldboy-2.avi │ │ ├oldboy-3.avi │ │ ├oldboy-4.avi │ │ ├oldboy-5.avi │ │ ├oldboy-6.avi │ │ ├oldboy-7.avi │ │ ├oldboy-8.avi │ │ └oldboy-9.avi │ ├ │ │ ├day8.zip │ │ ├oldboy-01.avi │ │ ├oldboy-02.avi │ │ ├oldboy-03.avi │ │ ├oldboy-04.avi │ │ ├oldboy-05.avi │ │ ├oldboy-06.avi │ │ ├oldboy-07.avi │ │ ├oldboy-08.avi │ │ ├oldboy-09.avi │ │ ├oldboy-10.avi │ │ └oldboy-11.avi │ ├ │ │ ├day9.zip │ │ ├oldboy-1.avi │ │ ├oldboy-10.avi │ │ ├oldboy-11.avi │ │ ├oldboy-12.avi │ │ ├oldboy-13.avi │ │ ├oldboy-14.avi │ │ ├oldboy-15.avi │ │ ├oldboy-2.avi │ │ ├oldboy-3.avi │ │ ├oldboy-4.avi │ │ ├oldboy-5.avi │ │ ├oldboy-6.avi │ │ ├oldboy-7.avi │ │ ├oldboy-8.avi │ │ └oldboy-9.avi │ ├ │ │ ├day10.zip │ │ ├oldboy-1.avi │ │ ├oldboy-10.avi │ │ ├oldboy-11.avi │ │ ├oldboy-12.avi │ │ ├oldboy-13.avi │ │ ├oldboy-14.avi │ │ ├oldboy-15.avi │ │ ├oldboy-16.avi │ │ ├oldboy-17.avi │ │ ├oldboy-18.avi │ │ ├oldboy-2.avi │ │ ├oldboy-3.avi │ │ ├oldboy-4.avi │ │ ├oldboy-5.avi │ │ ├oldboy-6.avi │ │ ├oldboy-7.avi │ │ ├oldboy-8.avi │ │ └oldboy-9.avi │ ├ │ │ ├01 python s14 day 11 上节作业和读书分享_rec.mp4 │ │ ├02 python s14 day 11 jQuery选择器_rec.mp4 │ │ ├03 python s14 day 11 jQuery选择器eq和nth-child的区别_rec.mp4 │ │ ├04 python s14 day 11 jQuery表单选择器_rec.mp4 │ │ ├05 python s14 day 11 jQuery操作属性、css和返回顶部实例_rec.mp4 │ │ ├06 python s14 day 11 jQuery过滤器、事件和扩展方法_rec.mp4 │ │ ├07 python s14 day 11 jQuery模态对话框和ajax_rec.mp4 │ │ ├08 python s14 day 11 eclipse环境的配置_rec.mp4 │ │ ├09 python s14 day 11 MVC框架和python的WEB框架简介_rec.mp4 │ │ ├10 python s14 day 11 Eclipse django 使用_rec.mp4 │ │ ├11 python s14 day 11 创建Django project and app_rec.mp4 │ │ └12 python s14 day 11 Django用户注册和ajax请求_rec.mp4 │ ├ │ │ ├01 python s14 day 12上节作业_rec.mp4 │ │ ├02 python s14 day 12 Django路由系统_rec.mp4 │ │ ├03 python s14 day 12 Windows下Python-MySQL模块的安装_rec.mp4 │ │ ├04 python s14 day 12 模型字段类型_rec.mp4 │ │ ├05 python s14 day 12 增删改查过滤排序_rec.mp4 │ │ ├06 python s14 day12 模版语言和跨站请求伪造1_rec.mp4 │ │ ├07 python s14 day 12 模版语言和跨站请求伪造2_rec.mp4 │ │ └08 python s14 day 12 模板extend和include_rec.mp4 │ ├ │ │ ├day13.zip │ │ ├oldboy-1.avi │ │ ├oldboy-10.avi │ │ ├oldboy-2.avi │ │ ├oldboy-3.avi │ │ ├oldboy-4.avi │ │ ├oldboy-5.avi │ │ ├oldboy-6.avi │ │ ├oldboy-7.avi │ │ ├oldboy-8.avi │ │ └oldboy-9.avi │ ├ │ │ ├01开课介绍.avi │ │ ├02前端技术概要.avi │ │ ├03今日内容概要.avi │ │ ├04Html本质以及在web程序中的作用(一).avi │ │ ├05Html本质以及在web程序中的作用(二).avi │ │ ├06Html本质以及在web程序中的作用(三).avi │ │ ├07html的head内标签.avi │ │ ├08html的body内标签之图标、换行及其他.avi │ │ ├09chrome查看html样式基本操作.avi │ │ ├10html的body内标签之input系列(一).avi │ │ ├11html的body内标签之input系列(二).avi │ │ ├12html的body内标签之多行文本及下来框.avi │ │ ├13html的body内标签之超链接.avi │ │ ├14html的body内标签之图片及表格.avi │ │ ├15html的body内标签之表格.avi │ │ ├16html的body内标签之fieldset标签和label标签.avi │ │ ├17上述内容总结.avi │ │ ├18css选择器.avi │ │ ├19css的存在形式及优先级.avi │ │ ├20css边框以及其他常用样式.avi │ │ ├21css之float样式.avi │ │ ├22css之float实现作业实例.avi │ │ ├23css之display样式.avi │ │ ├24css之内外边距.avi │ │ ├25本周作业以及思路.avi │ │ └day14课上所有.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值