Xshell中文乱码根本原因是本地终端编码与远端服务器编码不一致。需先执行locale命令确认远端LANG/LC_ALL值,再在会话属性→终端→字符编码中选匹配项(如UTF-8或GBK),最后必须断开重连才能生效;字体不支持或环境变量未固化也会导致假乱码。

你在Xshell里敲命令、看日志、查文件,中文全变成“”“□”或一串看不懂的符号,不是服务器崩了,也不是你手抖输错了,而是终端和远端在“说不同语言”——字符编码没对上。
先判断乱码类型再动手
打开当前会话,执行 locale 命令,重点看输出里的 LANG= 和 LC_ALL= 两行。如果显示的是 zh_CN.UTF-8 或带 UTF-8 字样,说明远端用的是 UTF-8;如果显示 zh_CN.GB2312 或 zh_CN.GBK,那远端走的是国标编码路线。这一步跳过去直接改设置,后面十有八九白忙活。
如果 locale 输出全是 POSIX 或空值,说明远端根本没设语言环境,这时候硬调本地编码也没用,得先让远端“开口说话”——临时加一句 export LANG=zh_CN.UTF-8 再试,确认能出中文后再固化设置。
改Xshell会话编码(最常用)
右键当前会话标签 → 【属性】→ 左侧点【终端】→ 找到【字符编码】下拉框。
根据上一步确认的远端编码,选对应项:【UTF-8】(现代Linux/容器环境默认)、【Chinese Simplified (GBK)】(老CentOS 6、部分国产OS)、【GB18030】(金融/政务类系统强制要求)。
选完点【确定】,但别急着看效果——这步改的是配置模板,旧会话还在用老解码规则缓存输出。
必须重启会话才能生效
第一步:点击工具栏【断开】按钮,或按 Ctrl+Shift+D;
第二步:重新点击该会话名称,或按 Ctrl+Shift+R 重连;
第三步:登录后立刻执行一条带中文的命令验证,比如 echo "测试中文" 或 ls -l | grep 中文。
注意:如果只点【应用】不重连,屏幕上残留的乱码不会自动刷新,你会误以为设置失败。这是新手踩坑最多的地方。
字体不支持也会假乱码
方法一:菜单栏【工具】→【选项】→【外观】→【字体】→ 点【选择】→ 换成“微软雅黑”或“新宋体”,这两款字体在Windows下自带且完整覆盖GB18030字库。
方法二:如果换字体后仍是方块或问号,说明问题不在编码而在字形——Xshell正在用Courier New这类纯西文字体强行渲染中文,它根本没字模,只能画方框。
方法三:字体设置里勾选【使用等宽字体】反而可能加剧乱码,尤其当字号小于9时,“微软雅黑”会被自动降级为不带中文字形的后备字体,建议取消勾选。
远程环境变量要同步配
1. 在远端执行 echo $LANG,确认当前shell实际生效的变量;
2. 如果是临时生效(比如只在当前窗口 export 过),退出重登就失效,需写入用户级配置:echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc && source ~/.bashrc;
3. 若是系统级统一管控,编辑 /etc/locale.conf,写入 LANG="zh_CN.UTF-8",然后运行 localectl set-locale LANG=zh_CN.UTF-8 生效。
这一步不做,下次你用新会话连接,或者切换用户,乱码立马回来——因为Xshell每次新建连接都读远端真实环境变量,不是读你上次手动export的值。

















