在 Linux 系统中解决中文乱码问题通常需要检查系统编码配置、字体支持、终端设置等多个环节。以下是分步解决方案:
Locale 决定了系统使用的语言和编码格式。确保已正确配置中文 UTF-8 环境。
locale
检查 LANG、LC_CTYPE 等变量是否为 zh_CN.UTF-8 或 en_US.UTF-8。
Debian/Ubuntu:
sudo apt install language-pack-zh-hans
CentOS/RHEL:
sudo yum install glibc-common langpacks-zh_CN
sudo dpkg-reconfigure locales # Debian/Ubuntu
# 或
sudo localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 # CentOS/RHEL
在列表中选择 zh_CN.UTF-8。
在 ~/.bashrc 或 /etc/environment 中添加:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
生效配置:
source ~/.bashrc
系统若缺少中文字体,可能导致图形界面或终端显示乱码。
文泉驿字体:
sudo apt install fonts-wqy-microhei # Debian/Ubuntu
sudo yum install wqy-microhei-fonts # CentOS/RHEL
Noto 字体:
sudo apt install fonts-noto-cjk # Debian/Ubuntu
sudo yum install google-noto-sans-cjk-ttc-fonts # CentOS/RHEL
fc-cache -fv
确保终端工具(如 GNOME Terminal、Konsole、xterm)使用 UTF-8 编码。
export LANG=zh_CN.UTF-8
使用 iconv 转换文件编码(如 GBK → UTF-8):
iconv -f GBK -t UTF-8 input.txt -o output.txt
Vim:在 ~/.vimrc 中添加:
set fileencodings=utf-8,gbk,gb2312,big5
Nano:启动时指定编码:
nano --utf8 filename
若通过 SSH 连接服务器出现乱码,检查客户端编码设置:
修改配置文件 /etc/mysql/my.cnf:
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
重启服务:
sudo systemctl restart mysql
添加 JVM 参数:
java -Dfile.encoding=UTF-8 ...
修改 conf/server.xml:
<Connector port="8080" URIEncoding="UTF-8" ... />
生成测试文件:
echo "中文测试" > test.txt
cat test.txt
若正常显示,则配置成功。
通过以上步骤,可覆盖大多数中文乱码场景。若问题仍存在,请检查具体软件(如 IDE、浏览器)的编码设置。