【发布时间】:2015-12-17 20:25:34
【问题描述】:
我有一个使用zlib 压缩的字符串,将其存储在字典中并创建字典的md5 哈希。但我得到了错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: invalid start byte
代码是:
data['extras'] = zlib.compress("My string".encode("utf-8")) //The string is very large that\'s why it\'s needed to be compressed to save up memory
checkup['hash'] = hashlib.md5(json.dumps(dict(data), sort_keys=True)).hexdigest()
字典是这样的:
{'extras':'x\x9cK\x04\x00\x00b\x00b'}
谁能告诉我如何在 JSON 中转储这个字典/字符串?
字符串是一个长json。比如:
{
"listing": {
"policies": null,
"policy_explanation": "Some Text",
"policy_name": "Flexi3",
"updated": "7 weeks ago",
"city": "Bengaluru",
"country": "India",
.
.
.
}
【问题讨论】:
-
你试过放 utf8 标头吗?你在用 py2 吗?
-
是的。结果相同。根据日志
checkup['hash'] = hashlib.md5(json.dumps(dict(data), sort_keys=True)).hexdigest(),错误在这一行中 -
py2 str 真是令人头疼。有问题的角色是什么?你能发布部分str
-
按照@Turn 的建议在压缩后添加
base64.b64encode后它工作正常。但是字符串的长度增加了近 30%。 12272:9204。是否有任何替代解决方案,这样它就不会占用额外的空间? -
JSON 不支持二进制数据,所以像
base64这样的东西是你能做的最好的......除非......你决定不压缩你的字典中的字符串,而是压缩整个 JSON 字符串一旦被转储。例如,如果您在网络上发送它,您需要对整个 json 有效负载进行 gzip 编码。
标签: python json dictionary compression zlib