我想编码下面显示的示例内容:
name = "Myname"
status = "married"
sex = "Male"
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}
我使用的是base64编码方案,使用的语法为<field-name>.encode('base64','strict')
,其中field-name
包含上述字段 - 名称,状态等。
除字典“color”之外的所有内容都会被编码。
我在color.encode('base64','strict')
错误如下所示:
Traceback (most recent call last):
color.encode('base64','strict')
AttributeError: 'CaseInsensitiveDict' object has no attribute 'encode'
我认为编码方法不适用于字典。
我该如何一次编码完整的字典?
是否有适用于词典的encode
方法的替代方法?
答案 0 :(得分:15)
encode
是字符串实例的方法,而不是字典。您不能简单地将它与每个对象的每个实例一起使用。
所以最简单的解决方案是首先在字典上调用str
:
str(color).encode('base64','strict')
然而,当您想要解码字符串并重新获得该字典时,这不太直接。 Python有一个模块可以做到这一点,它被称为pickle。 Pickle可以帮助您获取任何对象的字符串表示,然后您可以将其编码为base64。在对其进行解码后,您还可以将其解开,以取回原始实例。
b64_color = pickle.dumps(color).encode('base64', 'strict')
color = pickle.loads(b64_color.decode('base64', 'strict'))
pickle + base64的其他替代方案可能是json。
答案 1 :(得分:1)
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}
base64.urlsafe_b64encode(json.dumps(color).encode()).decode()
答案 2 :(得分:0)
# Something like this works on Python 2.7.12
from base64 import b64decode
color = {'eyeColor' : 'brown', 'hairColor' : 'golden', 'skinColor' : 'white'}
encoded_color = str(color).encode('base64','strict')
print(encoded_color)
decoded_color = b64decode(encoded_color)
print(decoded_color)
答案 3 :(得分:0)
简单方法:
import json
converted_color = json.dumps(color)
encoded_color = converted_tuple.encode()
print(encoded_tuple)
decoded_color = encoded_color.decode()
orginal_form = json.load(decoded_color)
答案 4 :(得分:-1)
这是在Python中编码python字典的另一种方法。
我在Python 36中进行了测试
import base64
my_dict = {'name': 'Rajiv Sharma', 'designation': "Technology Supervisor"}
encoded_dict = str(my_dict).encode('utf-8')
base64_dict = base64.b64encode(encoded_dict)
print(base64_dict)
my_dict_again = eval(base64.b64decode(base64_dict))
print(my_dict_again)
输出:
b'eyduYW1lJzogJ1Jhaml2IFNoYXJtYScsICdkZXNpZ25hdGlvbic6ICdUZWNobm9sb2d5IFN1cGVydmlzb3InfQ=='
{'name': 'Rajiv Sharma', 'designation': 'Technology Supervisor'}