• Python学习week4-bytes,bytearry与字符编码


    1、bytes与bytearray

    # bytes:不可变字节序列; bytearray:字节数组,可变数据类型;

    (1)bytes定义

    class bytes(object):
        """
        (1)bytes(iterable_of_ints) -> bytes
        (2)bytes(string, encoding[, errors]) -> bytes
        (3)bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
        (4)bytes(int) -> bytes object of size given by the parameter initialized with null bytes # 指定字节的bytes,被0填充;
        b=bytes(10) # 创建10个字节的bytes;
        print(b)   # ==> b'x00x00x00x00x00x00x00x00x00x00'; (5)bytes() -> empty bytes object # 创建空bytes;

    #  注意:bytes类型,使用b前缀定义;

      只允许基于ASCII使用字符串形式b'abc9'表示

      使用16进制表示b'x41x61'

    (2)bytearray定义  

    class bytearray(object):
        """
        bytearray(iterable_of_ints) -> bytearray
        bytearray(string, encoding[, errors]) -> bytearray
        bytearray(bytes_or_buffer) -> mutable copy of bytes_or_buffer
        bytearray(int) -> bytes array of size given by the parameter initialized with null bytes
        bytearray() -> empty bytes array
    # b=bytearray(5)
    # print(b) # bytearray(b'x00x00x00x00x00')

    2、字符编码

    2.1、 什么是字符编码?

    # 个人理解为:将人类理解的字符<===>翻译过程<===>计算机能够识别的数字;

    # 这个过程就是讲字符如何对应一个特定的数字的标准,这个标准即为:‘字符编码’;

    2.2、字符编码表

    (1)ASCII码表

    # 由于计算机最早是美国人发明的,所以有了第一张英文字符集与计算机数字对应的表;

    # ASCII:一个Bytes代表一个字符,1Bytes=8bit,8bit可以表示0-2**8-1=256个字符;

    (2)GBK编码表

    # GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符;==>GB2312(ANSI)==>GBK==>GB18030;(解决了中文与计算机识别数字对应关系)

    (3)Unicode万国码

    # Unicode(定长):统一用2Bytes代表一个字符;与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码;Unicode只是存放了与其他编码的映射关系;

    (4)utf-8(可变长)

    # 对于英文来说,如果采用Unicode则存储空间浪费太多(1倍),UTF-8:英文字符1Bytes,中文字符采用3Bytes;

    # 总结:内存中统一采用Unicode编码;硬盘可以采用各种编码方法存储数据,一般采用UTF-8编码;

    2.3、编码(encode)与解码(decode)

    # 通常来说:读取文件需要decode(解码),写入文件需要encode(编码);

    编码过程:字符== >字节流;计算机处理的是字节流而不是字符,所以编码是以特定的方式把字符变成字节流;

    解码过程:字节流==>字符;

    #  具体过程如下:

    从硬盘读取文件到内存:utf-8 ==>decode==>unicode

    从内存将文件保存到硬盘:unicode==>encode==>utf-8

    # 注意:保证不乱码的原则为:

    (1)以什么编码格式存文件,就以什么编码格式取(读)文件;

    (2)例如:如果以ascii编码格式存中文,则一定乱码,存的时候数据就损坏了;一定要在编码支持范围内存取和读取文件;

    2.4、python字符编码应用

    # python3的解释器默认utf-8编码,python2的解释器默认为ascii编码;所以默认python3解释器支持识别中文;

    # 以python test.py为例:(执行test.py的第一步一定是将文件内容从硬盘读取到内存中)

    # 将test.py的内容:

    line1:# coding:gbk

    line2:“你好

    line3:x=‘你好’

    以GBK编码格式保存;

    # 分析整个程序的运行过程:

    (1)第一阶段:启动python解释器

    (2)第二阶段:python解释器此时就是一个文本编辑器,负责打开test.py,即从硬盘中读取test.py的内容到内存;

    # 此时python解释器读取test.py的第一行内容# coding:gbk,来决定以什么编码格式读入到内存,这一行是用来设定python解释器这个软件的编码格式;

    # 可以使用sys.getdefaultencoding()查看,如果在文件开头没有指定,python2则使用ascii编码,python3则为unicode;

    (3)第三阶段:读取已经加载到内存的test.py代码(unicode格式编码),然后执行;执行过程中可能会开辟新的内存空间,次内存空间和之前的是不同的2个空间;

    # 例如:执行到x=‘nihao’,会申请新的内存空间,然后以unicode的编码方式存在内存中;

    (4)关于终端打印print

    # 例如: print(x) 输出实际时候用的是终端的编码,保证不乱码则需要,文件的读,存以及打印的终端的编码格式一致;

  • 相关阅读:
    02:AWT介绍
    01:GUI编程简介
    业余草 SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)
    业余草 SpringCloud教程 | 第五篇: 路由网关(zuul)(Finchley版本)
    业余草 SpringCloud教程 | 第四篇:断路器(Hystrix)(Finchley版本)
    业余草 SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)
    业余草 SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
    业余草 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
    业余草分享2018最新面试题总结
    业余草分享面试题,JVM结构、GC工作机制详解
  • 原文地址:https://www.cnblogs.com/soulgou123/p/9492641.html
Copyright © 2020-2023  润新知