cgps边框在PuTTY与Windows Terminal中显示不一致的原因排查
嗨,我来帮你梳理下这个问题的核心原因和解决办法~
从你提供的对比图(左边PuTTY、右边Windows Terminal)能看到,同样运行cgps,PuTTY里的边框变成了乱码字符,而Windows Terminal能正常显示线条,这本质上是终端对Unicode线条字符的支持以及终端类型配置不匹配导致的,和字体关系不大(你换字体没用也验证了这点),具体原因和修复方案如下:
终端类型(Terminfo)定义差异
cgps是基于ncurses库开发的,它会根据当前终端的TERM环境变量调用对应的terminfo配置,决定用什么字符绘制边框。Windows Terminal默认设置的终端类型是xterm-256color,这个配置里定义了使用Unicode盒状线条字符(比如┌、┐、└、┘这些);而PuTTY默认的终端类型可能是putty或者旧版xterm,这些配置里要么用ASCII字符模拟边框,要么没有正确映射Unicode线条符号,就会出现乱码。
修复:打开PuTTY配置→Connection→Data→Terminal-type string,把默认值改成xterm-256color,保存配置后重新连接服务器,再运行cgps试试。PuTTY的字符编码未开启UTF-8
Unicode线条字符属于UTF-8字符集,如果PuTTY没有设置接收UTF-8编码的终端输出,就会把这些字符解析成乱码(也就是你看到的“随机字母”)。
修复:在PuTTY的Window→Translation→Received data assumed to be in which character set,选择UTF-8,同时确保你用的字体支持Unicode(比如Consolas、Fira Code这类常见编程字体都支持)。PuTTY的线条绘制模式未启用Unicode支持
PuTTY有专门的线条绘制字符设置项,默认可能使用ASCII模式,导致无法正确渲染Unicode边框线条。
修复:进入PuTTY的Window→Appearance→Advanced,找到“Line drawing characters”选项,选择“Use Unicode line drawing code points”,确定后重启会话即可。

备注:内容来源于stack exchange,提问作者ProTofik

