提示cannot change locale (UTF-8) No such file or directory
date
May 26, 2023
slug
sshlocale
status
Published
tags
Linux
summary
type
Post
在Mac下使用 iTerm2 或 warp 远程登录Linux时,遇到提示:
cannot change locale (UTF-8) No such file or directory。在远端服务器上输入
localelocale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.utf8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=在自己的Mac上输入
locale,发现本机Mac是这样的LANG=""
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=考虑可能是Mac上
UTF-8的字符集Linux上没有对应的?真正的原因是:结果表现为确实没有对应的,但是根本原因是因为我使用zsh替代的了原始的bash,所以在
~/.zshrc没有设置LC_CTYPE ,而没有设置时LC_CTYPE的默认值变成了UTF-8,这个值对哪个系统来说都是不存在的。另外:locale -a:可以查看机器上支持的字符集
printenv:从输出结果中LC_CTYPE看到目前在用的字符集
所以有3种解决方法:
方法一:指定本地或远端的字符集
在本地如果使用zhs,可
vim ~/.zshrc 文件尾增加下面内容,然后sourceexport LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8或者在远端
vim /etc/environment增加下面内容,然后重新登录LANG=en_US.utf-8
LC_ALL=en_US.utf-8其实更推荐两端都设定。如果是自己服务器,可尝试安装其缺失的字符集,这样子一劳永逸。
方法二:不要将LANG设置发送到服务器端
打开本地ssh配置文件,
sudo vim /etc/ssh/ssh_config, 注释掉如下几行Host *
SendEnv LANG LC_*如果是使用iTerm2或Terminal,找到对应Preferences,关闭掉关于“Set locale”的开关即可。
如果还遇到vim打开某文件乱码,可以
vim /etc/vimrc 添加以下内容set encoding=utf-8
set fileencodings=utf-8,gbk,gb2312,gb18030参考资料: