xshell乱码问题 常见原因排查
Xshell6是一个强大的安全终端模拟软件。 Xshell6支持SSH1,SSH2和TELNET 协议。用户可以通过家里的网络连接远程主机,方便用户在家处理突发事情,可以让用户轻松管理远程主机。 Xshell6还可以上传下载文件,非常方便。
遇到 Xshell 中文乱码?本教程演示如何通过 printf 固定样例、检查 locale 字符集、调整终端编码与亚洲字体,快速排查并解决 Windows Xshell 连接 Linux 时的中文显示异常。
先把同一段“中文显示测试”稳定显示出来,再回头检查出问题的文件或程序,通常更容易找准乱码发生在哪一层。完成后,应能从原会话重新连接,看到可辨认的中文,并保留这次验证过的编码和字体设置。
下面以 Windows 版 Xshell 8 连接 Linux 的 Bash 命令行作为排查示例。先使用已经能够正常登录的 SSH 会话,记下原来的编码、字体和发生乱码的具体场景。编码决定字节如何解释,字体负责把字符画出来,两项需要分别检查。

Xshell 终端中乱码与正常提示符的对比示意
1. 确认乱码出现在远端终端
进入原来的连接标签,确认已经登录 Linux、看到了远端的命令提示符。下面的 locale、printf 等命令都在这个远端 Bash 中执行;如果停留在 Xshell 本地命令提示符,先连接自己的服务器。
回看发生异常的位置:是所有中文输出都成了杂乱字符,中文位置显示方框,只有某个文件不正常,还是仅在输入中文时出现异常。保留一小段不含敏感信息的样例,后面每次调整都用它比较。
若异常发生在 Xshell 的菜单或升级提示窗口,而远端输出正常,应记录软件版本和该窗口的内容,按客户端界面问题向官方支持查询。下面的会话设置针对终端输出,操作时要对准出现问题的连接。
2. 查看远端当前使用的字符集
在同一远端会话中依次执行:
locale
locale charmap
第一条列出当前区域设置,第二条查询字符集。记录 LANG、LC_CTYPE 和 LC_ALL。例如,字符集显示 UTF-8 时,支持采用 UTF-8 显示当前环境的文字;若显示其他字符集,保留其准确名称。
只看 LANG 容易漏掉覆盖设置。LC_CTYPE 与字符解释有关,非空的 LC_ALL 又会优先覆盖各项区域设置。若命令同时提示无法设置 locale,应把警告一起记下,向服务器维护者确认该环境实际可用的区域配置。
这一步先读取信息,不修改全局语言文件。服务器程序也可能自行指定输出编码,因此当前 locale 只是线索,仍要结合后面的固定样例与原程序比较。

2. 查看远端当前使用的字符集
3. 用 UTF-8 样例核对会话编码
在 Xshell 中打开【文件→打开】,选中刚才使用的已保存会话,点击【属性】。进入【终端】,找到【编码】。先记下旧值,再为下面这段明确使用 UTF-8 的样例选择【Unicode (UTF-8)】,点击【确定】保存。
从这个保存的会话连接到服务器,再在远端 Bash 中执行下面这一行。反斜杠和数字需要原样保留:
printf '\344\270\255\346\226\207\346\230\276\347\244\272\346\265\213\350\257\225\n'
这段格式串输出固定的 UTF-8 字节,预期看到“中文显示测试”并换行。它使用英文字符组成命令,可以先避开中文输入过程本身的干扰。

在会话属性中设置终端编码为 Unicode (UTF-8)
如果这行显示正常,说明当前会话能够把这段 UTF-8 字节正确显示出来。接着重新运行原先出问题的只读操作,比较实际内容。如果原程序使用其他编码,需根据它的实际输出另行匹配,不能仅凭这个样例就认定所有文件都应改成 UTF-8。
Xshell 标准工具栏上的【编码】按钮也能快速试选编码;准备长期保留时,仍回到这个已保存会话的【属性→终端】核对设置。
4. 中文仍是方框时检查亚洲字体
如果 UTF-8 样例中的中文仍显示为方框或缺字,进入同一会话的【属性→外观】,查看【亚洲字体(Asian Font)】。选择电脑上实际已安装、支持中文的字体,再确认字号能清楚阅读。
Xshell 的普通字体主要用于罗马字符和 ASCII 数字,亚洲字体用于中文等非 ASCII 字符。只更换英文字体,未必检查到了中文使用的那一项。

检查并更改外观设置中的亚洲字体
保存后重新连接这个会话,重复第三步的同一条 printf 命令。观察方框是否变为完整汉字,并与原样例比较。若中文变成了另一串可见但读不通的字符,应继续核对编码;若仍缺字,则把实际字体名称和字符样例保留给支持人员检查。
调整过程中注意,标准工具栏的字体选择会同时替换亚洲字体设置。之后如果又从工具栏换过字体,需要回来检查这一项是否仍是刚才选定的字体。
5. 固定样例正常时,检查原文件或程序
保持刚才可以正确显示样例的设置,重新查看原来有问题的内容。如果只有一个文件或某个业务程序乱码,先向文件生成者或程序维护者核对实际编码,例如是否使用 GBK、Big5 或 UTF-8;不要把屏幕上的猜测当作文件已经确认的编码。
对于已确认采用非 UTF-8 输出的程序,在对应会话的编码列表中选择与其匹配的项目,再重新产生一段同样的输出进行比较。每次只改一项,记下旧值和结果。该程序恢复正常后,也应记录它与 UTF-8 样例使用了不同编码,方便下次连接选用正确设置。
终端编码设置改变的是显示解释,原文件的字节不会随之转换。若文件已经被错误保存,或者内容本身带着替换字符,单纯切换 Xshell 编码可能无法恢复;应保留原文件,交由内容维护者结合备份确认。
如果固定样例正常,只有键盘输入中文时异常,再检查 Windows 中文输入法,以及所用远端程序如何接收输入。Xshell 的输出编码选项不负责安装或切换输入法,这类问题需要单独记录输入前后的变化。
6. 保存会话并重新连接验证
完成判断后,在【文件→打开】中再次选中同一个会话,通过【属性】确认最终编码和亚洲字体,点击【确定】。确认远端没有尚待完成的交互操作后断开连接,再从这个保存的会话进入。
按顺序复查固定样例和原来异常的内容。面向 UTF-8 环境时,“中文显示测试”和原程序的中文应在匹配设置下清楚可读;面向已确认的其他编码时,以那个程序的实际样例为准,UTF-8 测试时使用的设置另行记下。
最后保留会话名称、原值与最终值、locale charmap 结果和异常样例。这样既能确认设置在重连后仍然生效,也能在换服务器或换程序时按记录恢复对应配置。

重新连接后正确显示“中文显示测试”

































