个人python中级班学习之路(全程笔记第一模块) (第二章)(第4部分:16进制、编码转换、bytes类型与存储、py3代码流程与转换方法、py2与py3的区别与总结)

第二章                       数据类型    字符编码    文件操做

第四部分

 第十节 :16进制运算

 

1、定义与语法python

图例:编程

**16进制转换**代码验证编程语言

例:
1.八进制
>>> oct(1)     
'0o1'                #'0o1'  0o 是八进制的显示方式,后面的数字是多少位,就表明多少位
>>> oct(8)    
'0o10'
>>> oct(16)          #逢 8 进位
'0o20'
>>> oct(32)     
'0o40'               #8的多少倍就表明多少位
>>> oct(64)
'0o100'              #用的不多知道就行

2.十六进制
>>> hex(1)
'0x1'
>>> hex(15)         #十六进制中 f 表明15,由于在16进制中,不能出现10或者10以上的2位数字
'0xf'
>>> hex(16)         #十六进制是逢16进位    0x是16进制的显示方式
'0x10'
>>> hex(32)
'0x20'
>>> hex(64)         #16的多少倍就是多少位
'0x40'

 

  2、十六进制的特征及用途优化

       1.十六进制特征:16进制便于阅读,如今的存储设备都使用16进制为单位设置的编码

图例spa

 

 1.数字、二进制、十六进制之间的转换操作系统

  

例:
1.用数字查找ASCII码表里面对应的字符
>>> chr(100)
'd'
>>> chr(120)
'x'
>>> chr(123)        
'{'                    #返回对应得字符

2.数字转换二进制
>>> bin(97)
'0b1100001'    

 3、十六进制与二进制的转换:七张图了解16进制与二进制的转换翻译

图1:                                                               图2:                                                 图3:设计

图4:                                                               图5:                                                          图6:3d

图7:

第十一节:  字符编码间的转换与python的bytes类型

1、编码的回顾

1.编码的总类型

* ASCII 码,最先期的编码,占 1个字节的内存,只有英文。

** GB2312 占2个字节, 支持6700多个汉字。

*** GBK  ,GB2312的升级版,支持21000多个汉字。

**** shift - JIS  日本字符。

***** ks_c_5601-1987  韩国编码。

******TIS—620  泰国编码。

因为每一个国家都只有本身国家的编码,太局限,很差在国际上流通,缺乏统一性。

*******unicode:万国码应运而生,2-4个字节,已收录136690个字符,还在不断的扩张中,主要做用有2个:1.支持普遍,兼容旧编码。2.它包含了跟全球全部国家编码的映射关系,缺点是:英文本来1个字节,在这里面倒是2个字节,浪费空间翻倍的字节带来内存与流量翻倍,因此为了优化便与存储节省空间。后续出现三个unicode 的升级版分别是:

*UTF - 8 :(使用最普遍的语言)    分别用  1 ,2,  3,4 个字节表示,优先使用1个字节,没法知足再加1个字节,英文占 1 个字节 ,欧洲语系占 2 个字节,东亚占 3 个字节,其余占 4 个字节。

**UTF - 16 使用2-4个字节表示,优先使用2个,不然使用4个

***UTF - 32 所有用4个字节表示全部字符

总结:UTF 类编码是unicode编码设计的在存储和传输时节省空间的编码方案。

二、字符存储硬盘的方法:二进制

  (1).字符存储模式:(怎么存储和读取的)

        首先:字符必定是用0101等二进制存储的,可是因为存储时使用编码的标准不同(UTF - 八、GBK、ASCII 码表....等等),因此你用什么编码保存的,就要用什么编码去读取,不然会出现乱码现象。

图解:

      (2).字符编码的转换:

               虽然unicode统一了全部国家的编码,可是 大多数国家仍是在用本身国家的编码,中国就用 GBK 可是中国的编码出口到外国须要怎么的转换呢?unicode编程语言全部的电脑系统都会默认支持,把 中国的 GBK 放到 unicode 里面。映射出的 unicode 编程格式显示就能够了(unicode在这里至关于一个翻译)

图解:

******字符编码映射关系图解:

 

  2、  python3执行代码流程及转换方法

  一、在python3里面

      因此在python3里面写的代码去Windows上面去执行,不会乱码

 

 二、特殊状况,python2里面默认的编码是ASCII 码表。

    **在python2里面,python2并不像python3自动转unicode,而是仅以文件头声明的语言去解释和保存你的编码,若是以 UTF - 8解释和保存,在Windows系统上就会出现乱码,由于Windows系统默认支持的终端语言是GBK ,虽然Windows 默认支持unicode ,可是,python2 并不会自动把保存UTF - 8 格式的代码转成unicode 。 

********乱码确定是不行的,既然弄很差自动转,就人肉转了。

 

**由于太生手,因此搞很差python2 与 Windows 之间的转换直接上图解:

 

*****总体思路就是先把python代码转换成unicode给Windows阅读,在转回utf - 8 或GBK 存储,  **在python2里面,不是unicode就是str 字符串类型。

##记住下图的规则,就能懂了

*#*总结:一、在python3里,默认编码是 utf - 8 ,字符串默认编码是 unicode ,若是文件头声明了其余编码,存起来的字符串依然会自动转unicode 。

                 二、在python2里,默认编码是ASCII 码 ,字符串默认是 ASCII 码,若是文件头声明了编码,那么,字符串也会是什么,不会自动转unicode。由于unicode在python2里面是一个单独的类型。

 

3、 python3经过查看编码映射表肯定编码类型

    一、上边讲过转换代码的方法,那是在知情的状况下进行的。可是,若是不知情,不知道源代码,也不知文件头声明,怎么判断代码的转换语法是正确的呢

   (1).要有unicode编码关系映射表的exe,经过 把代码转换成二进制(或者16进制)在编码关系映射表里找到对应的编码,把16进制转换成二进制(二进制换算)

(2).GBK在设计时,为了兼容ASCII 码表,(ASCII码表只有127位,因此128位省略掉)因此GBK设计时规定,若是连续两个高字节的话,就认为是中文,高字节就是都超过了128位。unicode 在设计时,知道GBK的规定,因此默认忽略掉了最高一位的表示单位,

 

4、python的bytes类型介绍

一、定义:bytes ,就是在python里面显示的二进制串 

图解:

二、在没有特殊的状况下二进制串其实就是字符串,在有图片中的二进制串就不能叫字符串了,这就是区分bytes类型的缘由。没法找到对应的文字,

可是也是二进制串,的显示。这样的二进制串叫bytes类型就不足为奇了,因此,二进制串所有称为  bytes  类型

5、python3与python2的字符串区别 

1.在python2里

*str = bytes    为何有bytes类型?

由于 :要表示图片、视频等二进制格式 的数据,就要用bytes 类型表示,

**以UTF - 8  写的编码字符串,在Windows上没办法显示,如何在python2里写的代码让全球通用都能看呢?

就要以unicode 编写代码软件了有两种方法能够实现,第一种就是在文件头直接声明用unicode,第二种 就是把utf- 8 转换成unicode,转换的语法

s = you_str.decode(UTF - 8)好比你的代码变量名为 s ,就要 s.decode(UTF - 8)

***在python2里 有一个单独的类型  :unicode类型  

****语言格式须要转换,由于存到内存的编码,就是文件头声明的编码,不会转换其余格式

例:

在python2里 :以utf - 8 或 gbk . . . 写的代码 ,内容加载到内存里并不会被转成unicode 类型,依然 是utf - 8 或gbk ...

在python3里:以utf - 8 或 gbk . . . 写的代码,内容加载到内存里,会被自动转成unicode 类型。

 

2. 在python3里 

str = unicode(在python3里 ,默认支持 unicode,不是ASCII 码表,因此没有unicode 这个单独的类型)

6、总结

一、python2 与python3的转变

 由于 py 2 问题太多,知足不了太多用户的需求,特别是在支持的语言上(ASCII 码表)

因此py 3 横空出世,解决了不少问题,最重要的就是窜出时默认用unicode 格式,写文件默认使用 utf - 8 ,这样不管是在哪里都能正常显示文件

除此以外,还把str 和 bytes 进行了明确的区分,

str 就是unicode 格式的字符 

bytes 类型 就是二进制串

二、处理python编码问题的方法

最后,再提示下,python只要出现各类编码问题,无非是一下几种常见编码错误的缘由

python解释器的默认编码是否有问题(py2 ASCII码,py3 unicode)

写的源文件的编码,与文件头声明解释的编码是否一致例:(文件使用utf - 8 写的,在读取文件时文件头却声明 gbk 格式)

 在pycharm里面转换的时候(轻易不要转),用utf - 8 写的代码,转换 gbk (convert),转换不成就会乱码,不能回退,若是这样的话就意味着要从新写一份代码

还有就是运行终端,运行终端是继承操做系统的编码(Windows 默认 gbk ,linx默认是utf - 8 ,这些是能够改的,可是尽可能   要用什么格式写的,就以什么格式去读)

**小结:以上方法掌握以后,挨个排查基本上能解决问题 

 

 ——————————————模块结束线——————————————2018-11-06

相关文章
相关标签/搜索