必须同时配置PuTTY客户端为UTF-8编码、服务端locale设为zh_CN.UTF-8,并选用支持中文的字体;任一环节不匹配均会导致方框或乱码。

如果您使用 PuTTY 连接远程服务器时中文显示为方框(□)或乱码,则说明客户端接收到的字节流未被正确映射为中文字符。以下是解决此问题的步骤:
一、修改 PuTTY 的 Remote character set 为 UTF-8
该设置强制 PuTTY 将接收到的所有数据按 UTF-8 编码解析,适用于绝大多数现代 Linux 发行版(如 Ubuntu、CentOS 8+、Debian 11+)默认以 UTF-8 输出中文的场景。
1、启动 PuTTY,加载目标会话或选择 Default Settings。
2、在左侧 Category 树中展开 Window,点击 Translation。
3、在右侧找到 Remote character set 下拉菜单。
4、从下拉列表中选择 UTF-8(注意:不是 “Use font encoding” 或 “ISO-8859-1”)。
5、点击 Session → Save,保存配置。
6、重新建立连接,执行 locale 命令确认服务端 LANG 值含 UTF-8 后缀。
二、启用 Use font encoding 并指定 GBK 字体编码
该方案专用于 RT-Thread、旧版嵌入式系统或某些定制固件,其串口/Shell 输出采用 GBK/GB2312 编码而非 UTF-8,此时必须关闭 PuTTY 的自动解码逻辑,改由字体编码直接解释字节。
1、在 PuTTY 设置中进入 Window → Translation。
2、将 Remote character set 设置为 Use font encoding(通常位于下拉菜单最底部)。
3、进入 Window → Appearance → Font settings → Change…。
4、字体名称选择 SimSun 或 NSimSun(Windows 自带,兼容 GB2312/GBK)。
5、在 Character set(或 Script)下拉框中选择 CHINESE_GB2312(部分版本显示为 GBK)。
6、返回 Session 页面,点击 Save 保存会话。
7、重连后,在终端中输入中文命令或观察 FinSH/msh 输出是否正常渲染。
三、调整终端字体并启用中文字体回退
即使编码匹配,若所选字体不包含中文字符或未启用回退机制,仍会显示方框。需确保字体本身支持中文且 PuTTY 能调用对应字形。
1、打开 PuTTY 设置,进入 Window → Appearance → Font settings → Change…。
2、字体名称栏输入 Consolas(英文清晰),再勾选下方 Allow selection of Asian fonts(如存在)。
3、点击 OK 返回后,再次点击 Change…,在新窗口中切换至 NSimSun 或 Microsoft YaHei。
4、确认 Character set 设置为 CHINESE_GB2312 或 UTF-8(与 Remote character set 一致)。
5、点击 Apply,然后保存会话。
6、断开重连,运行 echo "测试中文" 验证显示效果。
四、修改 Windows 控制台 CodePage(备用方案)
当 PuTTY 复用 Windows 控制台子系统且系统级编码被覆盖时,需同步修正注册表中的控制台代码页,否则字体渲染层仍可能失败。
1、按下 Win + R,输入 regedit 打开注册表编辑器。
2、导航至路径:HKEY_CURRENT_USER\Console。
3、在右侧空白处右键 → 新建 → DWORD (32-bit) Value,命名为 CodePage。
4、双击新建项,将数值数据设为 65001(即 UTF-8 的 Windows 代码页 ID)。
5、关闭注册表编辑器,重启 PuTTY 程序。
6、新建连接测试中文输出是否消除方框。
五、验证并切换服务端 locale(服务端协同)
PuTTY 设置仅控制接收端解码,若服务端未启用中文 locale,即使客户端正确,ls、man 等命令仍可能输出 ASCII 替代符或空字符串。
1、登录服务器后,执行 locale -a | grep -i "zh_cn\|gbk\|utf8" 查看可用 locale。
2、若输出含 zh_CN.UTF-8,执行 export LC_ALL=zh_CN.UTF-8 临时生效。
3、如需永久生效,编辑 /etc/locale.conf(RHEL/CentOS)或 /etc/default/locale(Debian/Ubuntu),写入 LANG="zh_CN.UTF-8"。
4、执行 source /etc/locale.conf 或重启系统。
5、重新连接 PuTTY,运行 locale 确认所有字段均为 zh_CN.UTF-8。











