首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将unicode保存为redis格式,但提取错误

将unicode保存为redis格式,但提取错误
EN

Stack Overflow用户
提问于 2012-05-15 18:48:55
回答 4查看 11K关注 0票数 6

我使用mongodb和redis,redis是我的缓存。

我使用redis-py缓存mongodb对象:

代码语言:javascript
复制
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为:

代码语言:javascript
复制
{'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‘编解码器无法解码位置12中的字节0xe6 :序数不在范围内(128)

有没有人能给点建议?谢谢你

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-15 21:27:54

更新,对于全局设置,请检查jmoz's answer

如果您正在使用第三方库,比如django-redis,您可能需要指定一个定制的ConnectionFactory

代码语言:javascript
复制
class DecodeConnectionFactory(redis_cache.pool.ConnectionFactory):
    def get_connection(self, params):
        params['decode_responses'] = True
        return super(DecodeConnectionFactory, self).get_connection(self, params)

假设你正在使用redis-py,你最好将str而不是unicode传递给Redis,或者对于*set命令传递Redis will encode it automatically,通常是in UTF-8。对于*get命令,Redis不知道值的形式类型,只能直接在str中返回值。

因此,正如Denis所说,将对象存储到Redis的方式至关重要。您需要将该值转换为str,以使Redis层对您透明。

此外,不使用ascii,而使用set the default encoding to UTF-8

票数 7
EN

Stack Overflow用户

发布于 2012-09-06 00:18:38

我想我发现了问题所在。读完这篇文章后,我不得不显式地从redis中解码,这很痛苦,但很有效。

我偶然发现了一篇博文,其中作者的输出都是unicode字符串,这与我的不同。

查看StrictRedis.__init__,有一个参数decode_responses,缺省情况下它是Falsehttps://github.com/andymccurdy/redis-py/blob/273a47e299a499ed0053b8b90966dc2124504983/redis/client.py#L446

在construct上传入decode_responses=True,对我来说,这解决了OP的问题。

票数 28
EN

Stack Overflow用户

发布于 2012-05-15 18:54:00

对于每个字符串,您可以使用decode函数将其转换为utf-8格式,例如,对于代码中的标题字段的值:

代码语言:javascript
复制
In [7]: a='\xe6\xaf\x94\xe8\xb5\x9b'

In [8]: a.decode('utf8')
Out[8]: u'\u6bd4\u8d5b'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10599147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档