本质是客户端与服务器字符编码未对齐,必须同步设securecrt会话编码为utf-8、选中文字体,并配置服务器lang="zh_cn.utf-8";断开重连后生效。
电脑使用ssh工具连接linux服务器后,命令输出中文变成问号、方块或浣犲ソ这类乱码,本质是windows本地编码(gb18030)与linux服务端默认utf-8解码规则不匹配造成的字节流误读,必须同步客户端解码方式与服务端输出编码。
SecureCRT会话编码设为UTF-8
这是最直接有效的第一步,强制客户端按UTF-8规则解析收到的字节。
右键当前连接标签 → 选择“会话选项” → 左侧展开“终端” → 点击“外观” → 右侧“字符编码”下拉框选中“UTF-8” → 点击“确定” → 断开并重新连接。
这一步操作起来很简单,但若跳过它直接改服务器,所有后续设置都白做。因为即使服务器发的是UTF-8,SecureCRT仍用GB18030去“翻译”,结果必然错乱。
Xshell设置Unicode(UTF-8)编码
方法一:图形化路径
点击“文件” → “属性” → 左侧选“终端” → 右侧“编码”下拉菜单选“Unicode (UTF-8)” → 确定 → 重连。
方法二:快捷入口
在已连接的会话窗口标题栏右键 → “编码” → 直接点选“UTF-8” → 立即生效,无需重连(仅对当前会话)。
【注意】Xshell 7+ 版本中,“UTF-8”选项实际对应“Unicode (UTF-8)”,名称略有差异,别选成“UTF-8 with BOM”或“UTF-16”。
服务器端确认并启用zh_CN.UTF-8环境
第一步:检查当前locale
登录服务器后执行:locale
若输出中LANG=zh_CN或LANG=zh_CN.GB18030,说明服务端未启用UTF-8,需修正。
第二步:临时生效(当前会话)
执行:export LANG=zh_CN.UTF-8 → 再运行echo $LANG确认输出为zh_CN.UTF-8。
第三步:永久生效(推荐用户级)
① 打开用户配置文件:vi ~/.bashrc
② 在文件末尾新增一行:export LANG=zh_CN.UTF-8
③ 保存退出后执行:source ~/.bashrc
④ 验证:locale | grep LANG 应显示zh_CN.UTF-8。
这一步不可跳过。有些旧系统默认LANG=POSIX或C,连中文月份、提示符都会乱码,export只是覆盖当前shell,写入.bashrc才能保障每次登录都正确。
终端字体补全:避免中文显示为方块
方法1:SecureCRT字体设置
会话选项 → 外观 → 点击“字体”按钮 → 字体选“新宋体”或“Microsoft YaHei” → 字符集选“中文 GB2312”(兼容性更好)→ 确定。
方法2:Xshell字体设置
文件 → 属性 → 终端 → 字体 → 点击“更改字体” → 选“NSimSun”或“FangSong” → 字体样式选“常规” → 大小调至12或14 → 确定。
只设UTF-8编码却不换字体,中文可能显示为空心方块——因为默认等宽字体(如Courier New)不含中文字符轮廓,必须显式指定中文字体。











