macOS ssh 提示 cannot change locale (UTF-8)
macOS 上通过终端 ssh 连接服务器时提示警告:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
连接上服务器后 vim 编辑文本中文显示乱码。
使用其他 SSH 应用连接服务器没有警告且中文正常显示。
原因:
macOS 终端在建立 SSH 连接时,会将本地的语言环境变量(如:LANG 和 LC_*)传递给远程服务器。远程服务器上缺少 UTF-8 对应的语言环境导致无法正确识别这些变量。
解决方法:
- 检查可用的语言环境
登录到服务器后运行:
locale -a
查看已安装支持的语言环境:
en_US.utf8 zh_CN.utf8
- 修改连接时语言环境
LC_CTYPE=en_US.UTF-8 ssh user@host
en_US.UTF-8
或 en_US.utf8
都可以,两者实际上指的是相同的语言环境,建议使用 POSIX 标准 en_US.UTF-8
每次连接时输入语言环境比较麻烦,可修改 ssh 配置 ~/.ssh/config
一劳永逸:
Host <host_alias>
HostName <host>
User <user>
Port 22
SetEnv LC_CTYPE=en_US.UTF-8
现在不会出现警告,且中文正常显示