用 SecureCRT 连 CentOS 服务器,ls 一敲,中文文件名全成一串问号,vim 打开配置文件,注释也是乱码。securecrt乱码九成是编码不匹配,客户端两处设置基本能解决,顺序别搞反。
第一步:会话编码改成 UTF-8
现在的 Linux 发行版默认字符集基本是 UTF-8,而 SecureCRT 会话的默认编码未必是。改法:在会话标签上右键选 Session Options,左侧 Terminal、Appearance,右侧 Character encoding 选 UTF-8,确定后重连会话,多数情况中文直接就正常了。
想一劳永逸就改默认会话:Options、Global Options 里的 Default session,点 Edit Default Settings,按同样路径把编码改成 UTF-8,之后新建的所有会话都继承这套设置。注意右键标签改的只是当前会话,换台服务器还得再来一遍,所以建议直接改默认会话。
第二步:字体选支持中文的
编码对了还显示方块,就是字体不含中文字形。同一个 Appearance 页面里,把 Font 换成新宋体、微软雅黑这类中文字体,方块就没了。
乱码形态能帮你定位原因
- 满屏问号:服务器返回的字节里有会话编码不认识的部分,重点查编码设置。
- 方块豆腐块:字体缺字形,换中文字体。
- 只有个别文件乱:可能那个文件本身就是 GBK 编码存的,vim 里输入 :set fileencoding 看一眼,转成 UTF-8 保存即可。
顺手查一下服务器端
连上后敲 echo $LANG,输出末尾带 UTF-8 才算正常;要是显示 zh_CN.GBK 之类,那是服务器本身的 locale 配置问题,改服务器字符集是另一件事。另外跑脚本时输出中文乱码,脚本文件本身的编码也要查,Windows 记事本默认保存的编码和 Linux 上常用的不一样。客户端和服务器两边编码一致,乱码自然消失。
顺序记一下:securecrt乱码先动 Character encoding,再动 Font,最后才轮到怀疑服务器。三处都排除还没好,检查中间有没有跳板机、堡垒机做过编码转换。