zoukankan      html  css  js  c++  java
  • python说明编码和解解码

    python说明编码和解解码


    (一)术语
    编码:把人类易读符号转为计算机易读的二进制的操作。
    如,按照ASCII码表,将a转为二进制0110 0001 (十进制:97。16进制:x61)。
    按照base64码表,将a转为二进制01 1010 (十进制:26)。

    解码:把计算机易读的二进制转为人类易读符号的操作。
    如,按照ASCII码表,将0110 0001 转成符号为 a。
    按照base64码表,将01 1010 转成符号为 a。

    编码表:编码和解码之间的正确映射关系,成为编码表。编码表包括字符集(即符号)、数字代码(即序号)。

    ASCII码表:
    美国符号表。

    GB系列码表:
    中国符号表,兼容美国符号。
    JP系列码表:
    日本符号表,兼容美国符号。

    UTF系列码表:
    万国码符号表,兼容地球所有符号。

    ASCII码表规则特点:
    容纳了美国的符号。
    1个字节(8个bit位)表示一个符号,最大0111 1111 (0-127),最多表示128个符号(打印+非打印符号)

    GB系列码表规则特点:
    容纳了中国符号、美国符号。
    1-2个字节表示一个符号。
    当1个字节(8个bit位)的最高位为0时,1个字节表示一个符号。此规则是在兼容ASCII码表。
    当1个字节(8个bit位)的最高位为1时,2个这样的字节表示一个符号。此规则用于表示汉字(中国的符号)。

    UTF系列码表规则特点:
    容纳了全世界的所有符号。
    utf-32,4个字节(32个bit位)表示一个符号。
    utf-16,2个字节(16个bit位)表示一个符号。
    utf-8,可变字节。1、2、3个字节表示一个符号的情况都有。

    常见编码参考:https://www.cnblogs.com/andy9468/p/7465489.html

    base64编码表
    对二进制数据序列,如01010.....11000,每3个字节分成4组(1组6个bit位,共24个bit位,不足后面补0),再按照base64码表进行编码,不足3个字节的补上=等号。
    base64详细编码参考:https://www.cnblogs.com/qi-yuan-008/p/12940018.html

    编码表举例:ASCII表、base64表:https://www.cnblogs.com/andy9468/p/13039201.html

    延伸:
    键盘输入到屏幕显示,背后的数字转换。
    A键 => 30 => 65 => 97 => a
    A键:压下A键,对应一次mark。mark的理解:http://blog.sina.com.cn/s/blog_1511e79950102x2b0.html
    30:键盘扫描码为30
    65:键盘驱动程序软件识别30对应虚拟键码为65(A)
    97:键盘驱动程序软件没有识别到shift压下的事件,将虚拟键标记为ASCII码的字符‘a’(即为97)
    详细击键过程:https://www.iteye.com/blog/hu-jiacheng-1508028
    虚拟键键码参考:https://blog.csdn.net/sunlylorn/article/details/6456269

    (二)python说明代码

    # 1、转成2进制
    # (1)字符编码为二进制流
    print("(1)字符编码为二进制流")
    str1 = 'SE'
    str1_bytes = str1.encode('utf-8')  # 按utf-8编码,返回二进制流
    print(type(str1_bytes))
    print(str1_bytes)
    
    # (2)查看二进制字符串
    print("(2)查看二进制字符串")
    # 遍历单个字符的字节流。注意,从字节流中取出一个元素就是一个字节(8个bit位),该元素的类型是int。
    for one_byte in str1_bytes:
        # print(type(one_byte))
        binary_str = bin(one_byte)  # 将一个整数(值在0-255之间)转为二进制字串表示。
        # print(type(binary_str))
        print(binary_str)
    
    # (3)从文件中读取二进制
    print("(3)从文件中读取二进制")
    pic = "55.png"
    with open(pic, 'rb') as f:
        pic_content = f.read()
        print(type(pic_content))
        print(pic_content)
    pass
    
    # (4) 转成二进制字串
    # 内置函数bin、oct、hex实现10进制转换2、8、16进制
    print("(4) 转成二进制字串:(10进制的)3转二进制'0b11'")
    binary_str = bin(3)  # (10进制的)3转二进制'0b11'
    print(binary_str)
    
    # 2、转成8进制
    # oct(9) # (10进制的)9转8进制'0o11'
    print("(10进制的)9转8进制'0o11'")
    binary_str = oct(9)  # (10进制的)3转8进制'0o11'
    print(binary_str)
    
    # 3、转成16进制
    # (10进制的)17转二进制'0x11'
    print("(10进制的)17转16进制'0x11'")
    binary_str = hex(17)  # (10进制的)3转16进制'0x11'
    print(binary_str)
    
    # 4、转成字节流
    # str1.encode()
    
    # 5、转成字符串
    # bin1.decode()
    
    # 6、将图片二进制按照base64编码
    import base64
    
    print('将图片二进制按照base64编码')
    pic = "55.png"
    with open(pic, 'rb') as f:
        pic_content = f.read()  # 读取图片文件的二进制数据
        print(type(pic_content))
        print(pic_content)  # 图片原始二进制
        # 将图片二进制按照base64编码。最终是以ASCII码的二进制存储数据。逆向时,先用按照ASCII码表转为符号,再拿着符号按照base64码表转为二进制。
        base64_data = base64.b64encode(pic_content)
        print(base64_data)  # 图片按照base64转码后的二进制。
        # 将二进制按照utf-8(兼容了ASCII码表)转为字符串。
        s = base64_data.decode()
        print('data:image/png;base64,%s' % s)
    pass
    
    # 7、按utf-8编码和解码
    print("按utf-8编码和解码")
    str1 = 'SE'
    str1_bytes = str1.encode('utf-8')  # 按utf-8编码
    print(str1)
    print(str1_bytes)
    # print(str1_bytes.decode('utf-8'))  # 按utf-8解码
    # 遍历单个字符的字节流。注意,从字节流中取出一个元素就是一个字节(8个bit位),该元素的类型是int。
    for one_byte in str1_bytes:
        # print(type(one_byte))
        binary_str = bin(one_byte)
        # print(type(binary_str))
        print(binary_str)
    

      

  • 相关阅读:
    synchronize模块
    ansible 的user模块
    copy src remote_src false表示本地,true在远程
    import_tasks: tasks/sometasks.yml
    ansible 变量传递到include
    ansible unarchive模块
    防火墙在setup进入不了
    telegram汉化和代理
    Ubuntu 18.04 一键安装深度截图工具 Deepin Screenshot
    8086汇编语言程序设计——子程序与模块化
  • 原文地址:https://www.cnblogs.com/andy9468/p/13038551.html
Copyright © 2011-2022 走看看