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


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

    第四部分

     第十节 :16进制运算

     

    一、定义与语法

    图例:

    **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'

      二、十六进制的特征及用途

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

    图例

     1.数字、二进制、十六进制之间的转换

      

    例:
    1.用数字查找ASCII码表里面对应的字符
    >>> chr(100)
    'd'
    >>> chr(120)
    'x'
    >>> chr(123)        
    '{'                    #返回对应得字符
    
    2.数字转换二进制
    >>> bin(97)
    '0b1100001'    

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

    图1:                                                               图2:                                                 图3:

    图4:                                                               图5:                                                          图6:

    图7:

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

    一、编码的回顾

    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编码设计的在存储和传输时节省空间的编码方案。

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

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

            首先:字符一定是用0101等二进制存储的,但是由于存储时使用编码的标准不一样(UTF - 8、GBK、ASCII 码表....等等),所以你用什么编码保存的,就要用什么编码去读取,否则会出现乱码现象。

    图解:

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

                   虽然unicode统一了所有国家的编码,但是 大多数国家还是在用自己国家的编码,中国就用 GBK 但是中国的编码出口到外国需要怎么的转换呢?unicode编程语言所有的电脑系统都会默认支持,把 中国的 GBK 放到 unicode 里面。映射出的 unicode 编程格式显示就可以了(unicode在这里相当于一个翻译)

    图解:

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

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

      1、在python3里面

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

     2、特殊情况,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 字符串类型。

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

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

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

    三、 python3通过查看编码映射表确定编码类型

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

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

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

    四、python的bytes类型介绍

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

    图解:

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

    但是也是二进制串,的显示。这样的二进制串叫bytes类型就不足为奇了,所以,二进制串全部称为  bytes  类型

    五、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 这个单独的类型)

    六、总结

    1、python2 与python3的转变

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

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

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

    str 就是unicode 格式的字符 

    bytes 类型 就是二进制串

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

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

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

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

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

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

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

     

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

  • 相关阅读:
    f.lux
    Gidot TypeSetter (排版助手) 3.1.1.2
    FastStone Image Viewer --- 图片查看器
    www.nocmd.com 精品软件 坚持绿色之路 共筑生态之基
    Geek Uninstaller 1.4.5.136 卸载工具绿色版
    在线统计,在线调查意见,在线报名 --- 麦客
    QQ群管理 --- 免费提取QQ群所有成员
    8个在线接收手机短信验证码的免费网络服务整理
    微信群成员导出工具2.3下载 & 歪碰微信成员导出工具
    安装VSTO环境的方法
  • 原文地址:https://www.cnblogs.com/guoyilong/p/9906094.html
Copyright © 2020-2023  润新知