我正在使用 mongodb 和 redis,redis 是我的缓存。
我正在使用 redis-py 缓存 mongodb 对象:
obj in mongodb: {u'name': u'match', u'section_title': u'\u6d3b\u52a8', u'title':
u'\u6bd4\u8d5b', u'section_id': 1, u'_id': ObjectId('4fb1ed859b10ed2041000001'), u'id': 1}
使用 hgetall(key, obj) 从 redis 中获取的 obj 是:
{'name': 'match', 'title': '\xe6\xaf\x94\xe8\xb5\x9b', 'section_title':
'\xe6\xb4\xbb\xe5\x8a\xa8', 'section_id': '1', '_id': '4fb1ed859b10ed2041000001', 'id': '1'}
如您所见,从缓存中获取的 obj 是 str 而不是 unicode,因此在我的应用程序中,存在类似这样的错误:'ascii' codec can't decode byte 0xe6 in position 12: ordinal not in range(128)
谁能给些建议?谢谢你
最佳答案
我想我已经发现了问题所在。读完这篇文章后,我不得不从 redis 中显式解码,这很痛苦,但有效。
我偶然发现了一篇博文,其中作者的输出全是 unicode 字符串,这与我的明显不同。
查看 StrictRedis.__init__
有一个参数 decode_responses
,默认情况下为 False
。 https://github.com/andymccurdy/redis-py/blob/273a47e299a499ed0053b8b90966dc2124504983/redis/client.py#L446
在构造上传递 decode_responses=True
,对我来说这解决了 OP 的问题。
关于python - 在redis中保存unicode但获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599147/