Redis里中文显示不对劲,读出来全是乱码咋整才好呢?
- 问答
- 2025-12-25 14:16:41
- 1
这个问题太常见了,说白了就是“存进去的时候”和“读出来的时候”对中文的“理解”方式不一样了,就像你用广东话存了一句话,结果用普通话去读,肯定觉得不对劲,在计算机里,这个“话”就是字符编码,别担心,咱们一步步来,不用管那些复杂的术语,就把它当成一个沟通误会来解决。
最可能的问题出在哪儿?
十有八九,问题出在你的客户端工具上,你可能用的是 Redis 自带的那个命令行工具 redis-cli,这个工具本身有个“口音”设置,如果没设对,它显示出来的中文就会是乱码。
第一步:先检查你的 Redis 命令行客户端(redis-cli)
当你连上 Redis,准备输入命令之前,先别急着操作,看看你启动 redis-cli 的命令是不是这样的:
redis-cli
如果是,那大概率会出问题,因为这样启动,它默认使用的编码可能不是支持中文的 UTF-8,你需要告诉它:“嘿,我们用 UTF-8 来聊天”,方法很简单,在启动的时候加一个参数:

redis-cli --raw
这个 --raw 参数就是告诉 redis-cli:“用原始的方式显示数据,别自己做任何转换,特别是老老实实用 UTF-8 编码”,你加上这个参数再进去,然后重新读取一下刚才那个乱码的键,看看是不是中文正常显示了?如果正常了,那恭喜你,问题就这么解决了!
第二步:如果加了 --raw 还不行,那可能是“存”的时候就有问题
乱码不是读的问题,而是从一开始存进去的时候,数据就已经是“花脸”了,这通常发生在你的应用程序代码里。
想象一下这个场景:你的程序就像一个翻译官,它收到一句中文“你好”,需要把它转成 Redis 能理解的字节序列存进去,如果这个翻译官自作主张,用了一种奇怪的编码(比如不是 UTF-8)去翻译,那么存进 Redis 的其实就已经是乱码了,之后无论你用多么正确的姿势去读,读出来的也只是那个错误的“翻译结果”。

怎么判断是不是这个问题?你可以用一个“中立”的工具来检查一下 Redis 里存的东西到底长啥样,你可以使用一些带图形界面的 Redis 管理工具(像 Another Redis Desktop Manager 这种),这些工具通常对编码处理得比较好,用这种工具连上你的 Redis,看看那个键值对显示是否正常。
- 如果在这种工具里显示正常,那说明数据本身没问题,问题百分百出在你之前用的命令行工具上,坚持用
--raw或者换更好的工具就行。 - 如果在这种工具里显示也是乱码,那铁定就是你的程序在写入时编码弄错了。
第三步:解决程序写入的编码问题(如果是这个问题的话)
这需要你去检查写 Redis 的那部分代码,关键点就一个:确保你的程序和 Redis 客户端库都使用 UTF-8 编码。
在 Python 中,如果你从网络或文件读取字符串,确保在存入 Redis 之前,它是正确的 Unicode 字符串(Python 3 默认就是),主流的 Redis 客户端库(如 redis-py)会自动处理编码,通常默认就是 UTF-8,你一般不需要额外设置,但如果你怀疑库有问题,可以在创建 Redis 客户端对象时明确指定编码:

import redis r = redis.Redis(host='localhost', port=6379, decode_responses=True, encoding='utf-8')
这里的 encoding='utf-8' 就是明确指定编码,decode_responses=True 会让客户端在获取数据时直接返回字符串(解码后的),而不是字节。
在 Java 中,你使用 Jedis 或 Lettuce 等客户端时,它们处理字符串通常也是基于字节数组的,只要你存入的是正确的 UTF-8 字节,读出来就不会有问题,确保你程序中的字符串在转换成字节时使用的是 UTF-8 编码。
一个简单的测试方法
为了彻底搞清楚是“存”的问题还是“读”的问题,你可以做一个对照实验:
- 用你确信没问题的工具(比如加了
--raw的redis-cli或者图形化工具),手动存入一个中文值。- 在
redis-cli --raw里执行:set test_key “这是一个测试”
- 在
- 再用这个工具去读:
get test_key,如果显示正常,说明 Redis 服务器本身和这个工具之间的沟通没问题。 - 用你的程序去读这个
test_key,如果程序读出来是乱码,那就是你程序的“读”逻辑编码不对。 - 反过来,用你的程序写入一个中文值到一个新键,
set new_key “程序写入测试”,然后立刻用你确信没问题的工具去读这个new_key。- 如果工具读出来是乱码,那就是你程序的“写”逻辑编码不对。
- 如果工具读出来正常,但你的程序自己读自己写的数据却乱码,那可能是程序“读”和“写”的编码设置不一致。
总结一下
解决 Redis 中文乱码,就像调解一场沟通误会:
- 首选怀疑对象:你的读取工具,特别是
redis-cli,记得一定要用redis-cli --raw启动。 - 如果工具没问题,那问题就在你的应用程序,检查写入和读取数据时,是否全程都统一使用了 UTF-8 编码。
- 做对照实验,隔离问题,确定是“写”坏了,还是“读”坏了,然后对症下药。
核心原则就是“存和取要用同一种‘语言’(编码)”,而这首选‘语言’UTF-8,按照这个思路去排查,九成的乱码问题都能迎刃而解。
本文由帖慧艳于2025-12-25发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/68209.html
