【发布时间】:2018-06-27 10:42:28
【问题描述】:
我在 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提到的一个未实现的功能有关
我的问题是,有没有办法解决这个问题或解决方法以确保在反序列化时可以使用相同的密钥?
我想使用msgpack,但如果我无法使用str 键构建dict 对象并希望能够在反序列化时使用相同的键,它就变得无用了。
【问题讨论】:
-
另见github.com/msgpack/msgpack/issues/121#issuecomment-13815058 我建议您将all 字符串编码为UTF-8,然后再将它们传递给msgpack,然后在解包时解码。这样做还可以防止 ASCII / Latin1 范围之外的 Unicode 被破坏。
-
谢谢!这是问题,但来源与
msgpack的编码问题有关。你帮助追查了问题。回答跟随。