日期:2014-05-16  浏览次数:20849 次

Redis中的value包含中文显示的问题??
本地虚拟机linux环境

我在Redis中存储的value值是中文“马拉斯加”
Shell下get获取后展示的结果为:\xc2\xed\xc0\xad\xcb\xb9\xbc\xd3
请问这是什么编码格式?

用PHP程序get的值为原中文,如何操作使在Shell下获取的value也为汉字?
------解决方案--------------------
引用:
\xc2\xed\xc0\xad\xcb\xb9\xbc\xd3
这是十六进制

出现问题的原因是因为:你在通过什么语言操作字符存入redis时,使用的编码是GBK,
而你的shell用的编码是utf-8 ((我猜,locale 查看),,,所以导致在shell中无法正常显示为汉字.

举两个shell命令的例子,你可以在你的终端下输入试试.
echo -e -n '\xe9\xa9\xac\xe6\x8b\x89\xe6\x96\xaf\xe5\x8a\xa0'

显示为马拉斯加
再看一例:
echo -n '马拉斯加' 
------解决方案--------------------
 od -x

显示为
0000000 a9e9 e6ac 898b 96e6 e5af a08a
0000014


所以,你的解决方法:
1. 要么在存入redis时,我不知道你用的什么语言 python, php, c/c++?   ,先将字符串转换为utf-8编码.然后存入redis.
2. 要么你就设置下你的linux系统的编码为GBK.. 帮你搜索到的一篇:http://www.huomo.cn/os/article-b6c4.html

我强烈建议用第一种方法..像python, php, c/c++转换下字符串的编码只需要用一个函数就行了. 而用第二种方法的话,系统可能发生各种意想不到的问题..
------解决方案--------------------
终端与php程序使用的编码不一致,,所以没法简单的互操作.
php转换编码的函数:http://blog.163.com/long_alfred/blog/static/1882382792011717340455/
GBK -> UTF-8
UTF-8 -> GBK

mb_convert_encoding或者convert函数..
php不懂,你自己看吧.. 也就是在程序中增加一点操作,封装下就行了.
------解决方案--------------------
我也遇到了这个问题,不过现在解决了,只需要你在启动redis-cli时在其后面加上--raw参数即可启动后 再显示就正常了