• Python之编码本质


    Python之编码本质

    声明本文章仅用于个人学习的内容整理归纳总结,本人才疏学浅错误难免发生。

    字节序列

    • Python3 引入两个新的类型bytes、bytearray。
    • bytes不可变字节序列;bytearray是可变字节数组。

    编码与解码

    • 编码:str => bytes,将字符串这个字符序列使用指定字符集encode编码为一个个字节组成的序列 bytes
    • 解码:bytes或bytearray => str,将一个个字节按照某种指定的字符集解码为一个个字符串组成的 字符串
      • 编码:字符序列 -> 二进制binary 字节序列 encode编码
      • 解码:bin -> str decode解码
    'abc'.encode()
    # bytes
    # 返回结果:b'abc'
    
    • 1
    • 2
    • 3
    bytes
    # 返回结果:bytes
    
    • 1
    • 2
    bytes()
    # 返回结果:b''
    
    • 1
    • 2
    '啊'.encode()
    # \x一个十六进制数 转义字符
    # 返回结果:b'\xe5\x95\x8a'
    
    • 1
    • 2
    • 3
    b'\xe5\x95\x8a'.decode()
    # 解码
    # 返回结果:'啊'
    
    • 1
    • 2
    • 3
    x = b'\xe5\x95\x8a'.decode()
    len(x)
    # 查看x的长度
    # 返回结果:1
    
    • 1
    • 2
    • 3
    • 4
    '啊'.encode()
    # unicode编码
    # 返回结果:b'\xe5\x95\x8a'
    
    • 1
    • 2
    • 3
    '啊'.encode('gbk')
    # unicode使用gbk编码
    # 返回结果:b'\xb0\xa1'
    
    • 1
    • 2
    • 3
    b'\xb0\xa1'.decode('big5')
    # gbk编码使用big5解码(big5又称大5码是台湾的编码格式)
    # 返回结果:'陛'
    
    • 1
    • 2
    • 3
    "啊你好".encode('gbk')
    # unicode使用gbk编码
    # 返回结果:b'\xb0\xa1\xc4\xe3\xba\xc3'
    
    • 1
    • 2
    • 3
    b'\xb0\xa1\xc4\xe3\xba\xc3'.decode('big5')
    # gbk编码使用big5解码
    # 返回结果:'陛斕疑'
    
    • 1
    • 2
    • 3
    b'\xb0\xa1\xc4\xe3\xba\xc3'
    # 字节序列
    
    • 1
    • 2
    b'\xb0\xa1\xc4\xe3\xba\xc3'.decode('gbk')
    # '啊你好' 字符序列
    # 返回结果:'啊你好'
    
    • 1
    • 2
    • 3
    '\x41'
    # str 表示
    # 返回结果:'A'
    
    • 1
    • 2
    • 3
    0x41
    # int 表示
    # 返回结果:65
    
    • 1
    • 2
    • 3
    'ab' > 'ac'
    # 字符串比较大小,逐个字符比较
    # 返回结果:False
    
    • 1
    • 2
    • 3
    '\x41\x09 \x20\x31'
    # 返回结果:'A\t  1'
    
    • 1
    • 2
    b'\x41\x09 \x20\x31'
    # 返回结果:b'A\t  1'
    
    • 1
    • 2
    'A' > 'a'
    # 返回结果:False
    
    • 1
    • 2
    • 在二进制的世界里没有编码,就是一个字节一个字节形成的字节序列
    • 如果把二进制当成字符看,需要确认对应的编码表
    • python3 用的字符格式都是unicode编码表
  • 相关阅读:
    【数据结构与算法】八大排序(上),八大排序你都搞懂了吗?
    LabVIEW应用开发——控件的使用(三)
    入行软件测试5年,跳槽3次,我摸透了软件测试这一行
    Fastweb - Lua操作SQLite数据库
    java EE初阶 —进程与线程的区别
    Spring Boot整合swagger
    1. 什么是微服务 ?
    栈和队列(2)
    DI依赖注入和第三方bean管理以及核心容器
    代码随想录训练营二刷第五十六天 | 1143.最长公共子序列 1035.不相交的线 53. 最大子序和
  • 原文地址:https://blog.csdn.net/weixin_41224474/article/details/133913281