最近将 macOS 的语言切换到英文后,再远程登录到开发机发现远程机器的中文显示变成了乱码,记录一下如何解决这种问题。

  1. 记得我的 ssh 配置是允许发送一些环境变量的,这样可以让远程环境的一些操作跟本地机器一致,赶紧查看一下 /etc/ssh/ssh_config 文件中的配置,果不其然,其中有 SendEnv LANG LC_* 这就意味着,我本机的语言配置会同步给到远端机器。
  2. 随即执行 env |grep LC_ 可以看到,LC_CTYPE=UTF-8,但是我们查询一下,在标准 Linux 发行版中,是没有 UTF-8 的。
  3. 怎么办呢?这个 LC_CTYPE 是由谁注入进来的呢?Google 一下我们找到了答案,原来是 iTerm2 和 自带的 Terminal 都勾选了自动设置语言的配置,同时因为我的远程机器都是 Linux 系统。而且好巧不巧,远程开发机设置的语言是中文,这样我本地机器和远端机器环境语言其实是不一致的,这时候我们再同步这个配置,就不那么合理了。

所以我们有两个办法来解决这个问题。

1. 注释掉 ssh 配置

修改 /etc/ssh/ssh_config 或者 ~/.ssh/config 文件,然后重新连接即可:

Host *
    #SendEnv LANG LC_*

2. 直接把这个选项去掉

2.1. iTerm2

iTerm2 配置

2.2. Terminal

Terminal 配置

参考

  1. shell – On macos, LC_CTYPE set to wrong value – where to change for iTerm2? – Super User
  2. Linux的locale、LC_ALL和LANG – LC_coding – 博客园
  3. 在Mac下远程登录Linux时,提示cannot change locale (UTF-8) No such file or directory | Recording

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据