前言:
Python把中文字符串保存到Redis,中文字符串会被转换为字节流的形式,Python从Redis的获取的中文字符串值是以字节流的形式的,所以想要显示中文还需要解码。Python2从Redis获取的值是str类型,而Python3则是bytes类型,见下面两段代码。从下面两段代码可以看出中文字符串“
计算机”在Python2是以
'\xbc\xc6\xcb\xe3\xbb\xfa'形式存在的,在Python3中是以
b'\xe8\xae\xa1\xe7\xae\x97\xe6\x9c\xba',也就是编码方式不一样,所以解码为中文的方式也不一样。
Python2:
>>> import redis >>> r = redis.Redis() >>> r.set('test', '计算机') True >>> r.get('test') '\xbc\xc6\xcb\xe3\xbb\xfa' >>> a = r.get('test') >>> type(a) <type 'str'> >>>
Python3:
>>> import redis >>> r = redis.Redis() >>> r.set('foo', '计算机') True >>> r.get('foo') b'\xe8\xae\xa1\xe7\xae\x97\xe6\x9c\xba' >>> a = r.get('foo') >>> type(a) <class 'bytes'> >>>
安装:
下面会用到chardet模块,安装命令:
pip install chardet
Python2解码中文:
Python2中Redis返回的字符串是str类型,所以可以通过str.decode函数来解码,解码为GB2312。
>>>