• 【python】字节转换 base64 encode decode pickle


    pickle模块的使用

    pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高。

    • pickle.dumps() 将python数据序列化为bytes类型
    • pickle.loads() 将bytes类型数据反序列化为python的数据类型
    >>> import pickle
    
    >>> d = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
    >>> s = pickle.dumps(d)
    >>> s
    b'x80x03}qx00(Xx01x00x00x001qx01}qx02(Xx05x00x00x00countqx03K
    Xx08x00x00x00selectedqx04x88uXx01x00x00x002qx05}qx06(hx03Kx14hx04x89uu.'
    >>> pickle.loads(s)
    {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
     

    base64模块的使用

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Za-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。

    Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

    python标准库中提供了base64模块,用来进行转换

    • base64.b64encode() 将bytes类型数据进行base64编码,返回编码后的bytes类型
    • base64.b64deocde() 将base64编码的bytes类型进行解码,返回解码后的bytes类型
    >>> import base64
    >>> s
    b'x80x03}qx00(Xx01x00x00x001qx01}qx02(Xx05x00x00x00countqx03K
    Xx08x00x00x00selectedqx04x88uXx01x00x00x002qx05}qx06(hx03Kx14hx04x89uu.'
    >>> b = base64.b64encode(s)
    >>> b
    b'gAN9cQAoWAEAAAAxcQF9cQIoWAUAAABjb3VudHEDSwpYCAAAAHNlbGVjdGVkcQSIdVgBAAAAMnEFfXEGKGgDSxRoBIl1dS4='
    >>> base64.b64decode(b)
    b'x80x03}qx00(Xx01x00x00x001qx01}qx02(Xx05x00x00x00countqx03K
    Xx08x00x00x00selectedqx04x88uXx01x00x00x002qx05}qx06(hx03Kx14hx04x89uu.'
    # cart_str ---> 本地cookie获取的值
    cart_str = request.COOKIES.get("cart")
    print("0")
    print(cart_str)
    print("1")
    print(cart_str.encode())
    print("2")
    print(base64.b64decode(cart_str.encode()))
    cart_dict = pickle.loads(base64.b64decode(cart_str.encode()))
    print("3")
    print(cart_dict)
     
     
    输出:
    0
    gAN9cQBLCH1xAShYBQAAAGNvdW50cQJLAlgIAAAAc2VsZWN0ZWRxA4h1cy4=
    1
    b'gAN9cQBLCH1xAShYBQAAAGNvdW50cQJLAlgIAAAAc2VsZWN0ZWRxA4h1cy4='
    2
    b'x80x03}qx00Kx08}qx01(Xx05x00x00x00countqx02Kx02Xx08x00x00x00selectedqx03x88us.'
    3
    {8: {'count': 2, 'selected': True}}
  • 相关阅读:
    Spring.NET教程(十八)——整合Remoting(应用篇)
    Spring.NET教程(十五)——事务传播行为(基础篇)
    Spring.NET教程(十三)——AOP的配置(基础篇)
    Spring.NET教程(十九)——整合Web Service(应用篇)
    Spring.NET教程(十七)——整合NHibernate和ASP.NET MVC(基础篇)
    VC++打开文件 CFileDialog::DoModal
    通过lua自带例子学习lua 05
    (转)Lua与C/C++交互——Lua调用C/C++
    通过lua自带例子学习lua 08 (3638)
    通过lua自带例子学习lua 07 (3135)
  • 原文地址:https://www.cnblogs.com/oscarli/p/12441049.html
Copyright © 2020-2023  润新知