首页 > 代码库 > [python]mysql数据缓存到redis中 取出时候编码问题
[python]mysql数据缓存到redis中 取出时候编码问题
描述:
一个web服务,原先的业务逻辑是把mysql查询的结果缓存在redis中一个小时,加快请求的响应。现在有个问题就是根据请求的指定的编码返回对应编码的response。
首先是要修改响应的body的编码,由于mysql去出来就是unicode,所以直接使用
```
content = content.encode(charset)
```
来转化,然后在请求header中也加入字符编码。
解决:
可是这样测试下来,有的请求可以返回正确的编码格式,有的还是乱码,最后猜测是redis中数据类型的问题
#redis 中取出的缓存数据 type(content) <type 'str'> import chardet chardet.detect(content) {'confidence': 0.99, 'encoding': 'utf-8'} #编码还是utf-8 #msyql取出的字段数据 type(content) <type 'unicode'>
一种方式是在redis中就存储unicode编码,缓存的时候还是unicode,为啥到redis里面再取出来就是str了呢? 可能还需特殊处理吧。
一种方式是对content判断类型,分别处理。
最后的解决片段:
if isinstance(content, unicode): content = content.encode(charset) elif isinstance(content, str): content = content.decode("utf-8").encode(charset)
参考: http://www.pythonclub.org/python-basic/codec
本文出自 “orangleliu笔记本” 博客,转载请务必保留此出处http://blog.csdn.net/orangleliu/article/details/41445947
作者orangleliu 采用署名-非商业性使用-相同方式共享协议
[python]mysql数据缓存到redis中 取出时候编码问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。