设为首页 加入收藏

TOP

Redis中文入库成功,读取数据写入文件乱码问题
2014-11-24 07:58:30 来源: 作者: 【 】 浏览:0
Tags:Redis 中文 入库 成功 读取 数据 写入 文件 乱码 问题

最近需要用到redis ,但是在编码这个问题上,纠结了很久。

需求

每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果。

使用的redis模块 :

redis-py

问题 :

入库正常,读取数据成功,以GBK编码写入文件出现异常。

通过以下参数连接 redis :

client = redis.StrictRedis(host='localhost', port=6379, db=0, password="***")

从stackoverflow上了解到 :最好传入一个str类型的value给redis,而不是unicode,否则,redis会直接使用set命令,将你的value设置为utf-8的格式,当你使用get方法获取数据的时候,redis本身并不关心你value的数据的类型,而给你返回一个str类型的value。因此,你存储的时候value的类型是关键所在 ,主要体现在redis-py的源码中 :

def encode(self, value):
        """
        Encode the value so that it's identical to what we'll
        read off the connection
        """
        if self.decode_responses and isinstance(value, bytes):                                                       
            value = value.decode(self.encoding, self.encoding_errors)
        elif not self.decode_responses and isinstance(value, unicode):
            value = value.encode(self.encoding, self.encoding_errors)
        return value

解决方法 :在使用redis API 连接数据库时 :

class redis.StrictRedis(host='localhost', port=6379, db=0, password=None, socket_timeout=None,connection_pool=None, charset='GBK', errors='strict', decode_responses=True, unix_socket_path=None) 通过设置上述参数,解决了编码问题。

如果有人有更好的解释和解决方案,求分享!

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Sybase数据库工具DbVisualizer乱.. 下一篇我怎么样识破罗永浩的(锤子手机)..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)
·MongoDB安装教程(Li (2025-12-26 17:51:04)
·bios设置按什么选择 (2025-12-26 17:20:08)
·知乎 - 知乎 (2025-12-26 17:20:04)