SBT终端提示符无法正确渲染Unicode方框字符求助
解决tmux+sbt环境下单权重方框字符乱码问题
问题背景
想把SBT终端提示符改成└─→,在~/.sbt/1.0/global.sbt里写了这段代码:
shellPrompt := { state => "\u2514\u2500\u2192 " }
结果在tmux里显示成mq→,→正常,但└和─变成了m和q。进一步测试发现,\u2500到\u257F区间的单权重方框字符全乱码,而tmux外的终端、SBT Console里都能正常显示,系统编码是UTF-8,换Java 8/17也没用。
修复步骤
问题出在tmux的终端配置没正确处理UTF-8的特殊字符,按下面的步骤改:
- 修改tmux配置文件
打开~/.tmux.conf,添加或更新这两行:
set -g default-terminal "screen-256color" set -ga terminal-overrides ",screen-256color:Tc"
第一行指定终端类型为支持256色和UTF-8的screen-256color,第二行开启Tc选项,让tmux把真彩色和UTF-8字符属性正确传给底层终端。
确认终端编码设置
检查你用的终端(比如iTerm2、GNOME Terminal),确保字符编码设为UTF-8,并且开启了Unicode字符支持。重启tmux生效
关掉所有tmux会话,重新打开tmux再启动sbt,提示符应该就能正常显示└─→了。
额外提示
如果上面的配置不管用,可以试试把default-terminal改成xterm-256color,有些终端对这个类型的兼容性更好。另外,SBT Console能正常显示是因为它直接用终端的渲染逻辑,而SBT的shell提示符是JVM输出的,tmux配置不对就会导致字符解析错误。
内容的提问来源于stack exchange,提问作者cheezsteak
相关产品推荐
相关产品推荐

