在 CentOS 上遇到 ZooKeeper 乱码,通常不是 ZooKeeper 本身的问题,而是字符编码环境不一致导致的。下面按常见场景给你一套排查和解决方案。
echo $LANG
locale
如果看到:
LANG=CLANG=POSIXUTF-8就很可能乱码。
sudo localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
或(推荐):
sudo yum install -y langpacks-zh_CN
sudo vi /etc/locale.conf
内容改成:
LANG="zh_CN.UTF-8"
或者:
LANG="en_US.UTF-8"
source /etc/locale.conf
或重新登录服务器。
zkServer.shvi bin/zkServer.sh
在 Java 启动参数中加:
-Dfile.encoding=UTF-8
例如:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
zkEnv.shvi bin/zkEnv.sh
添加:
export JAVA_OPTS="-Dfile.encoding=UTF-8"
如果你是用:
./zkCli.sh
乱码,同样要设置:
export LANG=zh_CN.UTF-8
再启动:
./zkCli.sh
⚠️ 注意:
new String(data, StandardCharsets.UTF_8);
get /your/node
如果还是乱:
get /your/node | hexdump -C
确认是否真的是 UTF-8。
LANG=*.UTF-8zkServer.sh 加了 -Dfile.encoding=UTF-8LANG 一致如果你愿意,可以把:
zkCli 输出发给我,我可以精准定位是哪一层乱码。