MacOS SSH登陆Linux后中文乱码问题

这种情况一般是终端和服务器的字符集不匹配,MacOS默认的是UTF-8字符集。

输入locale可以查看字符编码设置情况。我在Mac下使用了zsh替代了bash,而oh-my-zsh.zshrc配置文件中没有设置默认编码,所以需要本地和服务器端设置相同编码。

  1. 修改.zshrc配置文件(如果是bash则修改对应.bash_profile.bashrc文件):

    1
    $ vim ~/.zshrc
  2. 在文件内容末端添加:

    1
    2
    export LC_ALL=en_US.UTF-8
    export LANG=en_US.UTF-8
  3. 使修改生效:

    1
    $ source ~/.zshrc

如果设置之后出现以下问题:

1
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

则可能是服务器上缺少对应字符集。

The error “bash: warning: setlocale: LC_ALL: cannot change locale (en_US)” occurs when the remote server does not understand the locale “en_US.UTF-8”. The fix is to generate the locale using the command “sudo locale-gen en_US.UTF-8” and update the locale repository to store this locale, such that future connections(ssh) can understand this locale. The command “sudo dpkg-reconfigure locales” updates the local repository with the newly generated locale, i.e en_US.UTF-8.

在服务器上安装对应的字符集就可以修复(以Ubuntu为例):

1
2
sudo locale-gen en_US.UTF-8
sudo dpkg-reconfigure locales

有时字符集问题也可能是本地找不到与远程相匹配的字符,编辑 服务器上的/etc/ssh/ssh_config文件,注释此行:

1
# SendEnv LANG LC_*

即可解决问题。