gpt4 book ai didi

python - msgpack 将 dict 键字符串反序列化为字节

转载 作者:太空狗 更新时间:2023-10-30 02:25:40 28 4
gpt4 key购买 nike

我在 python 中遇到 msgpack 问题。似乎在序列化 dict 时,如果键是字符串 str,则它们未正确反序列化并导致引发 KeyError 异常。

例子:

>>> import msgpack
>>> d = dict()
>>> value = 1234
>>> d['key'] = value
>>> binary = msgpack.dumps(d)
>>> new_d = msgpack.loads(binary)
>>> new_d['key']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'key'

这是因为调用 loads() 后键不是字符串,而是反序列化为 bytes 对象。

>>> d.keys()
dict_keys(['key'])
>>> new_d.keys()
dict_keys([b'key'])

这似乎与提到的未实现功能有关 in github

我的问题是,是否有解决此问题的方法或变通方法以确保在反序列化时可以使用相同的 key ?

我想使用 msgpack 但如果我不能用 str 键构建一个 dict 对象并期望能够使用相同的对象反序列化后的 key ,它变得无用。

最佳答案

调用dumpspackb 时会设置默认编码

:param str encoding:
| Convert unicode to bytes with this encoding. (default: 'utf-8')

但在调用 loadsunpackb 时默认情况下设置,如下所示:

Help on built-in function unpackb in module msgpack._unpacker:

unpackb(...)
unpackb(... encoding=None, ... )

因此更改反序列化的编码可以解决问题,例如:

>>> d['key'] = 1234
>>> binary = msgpack.dumps(d)
>>> msgpack.loads(binary, encoding = "utf-8")
{'key': 1234}
>>> msgpack.loads(binary, encoding = "utf-8") == d
True

关于python - msgpack 将 dict 键字符串反序列化为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48319949/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com