登陸阿里云CentOS出現(xiàn)警告提示
Welcome to aliyun Elastic Compute Service!
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
在遠(yuǎn)程服務(wù)器上輸入 locale
locale: 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.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
在自己的Mac上輸入locale,發(fā)現(xiàn)本機(jī)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上沒有對應(yīng)的?
真正的原因是:結(jié)果表現(xiàn)為確實(shí)沒有對應(yīng)的,但是根本原因是因?yàn)槲沂褂脄sh替代的了原始的bash,所以在~/.zshrc沒有設(shè)置LC_CTYPE,而沒有設(shè)置時LC_CTYPE的默認(rèn)值變成了UTF-8,這個值對哪個系統(tǒng)來說都是不存在的。
那么有兩種解決方法:
- 如果使用zsh需要使用
vim ~/.zshrc在文件末
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
然后source ~/.zshrc使設(shè)置生效。
- 不發(fā)送本地的locale到遠(yuǎn)程的主機(jī)
編輯 vim /etc/ssh/ssh_config找到SendEnv LANG LC_*注釋掉
# SendEnv LANG LC_*
關(guān)閉iTerm2再連接也可以。
第一種方法是根本解決之法
2019/4/27 更新
第三種情況,本地機(jī)locale正確發(fā)送的情況下,遠(yuǎn)程服務(wù)器沒有正確的locale。
最近在使用Proxmox VE,在使用LXC模板創(chuàng)建的debian容器中又出現(xiàn)上述問題,這一次情況是容器本身的locale是只有
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
遠(yuǎn)程服務(wù)器沒有正確設(shè)置locale,結(jié)果就是無法正確的顯示非英文字符

而Mac本身確實(shí)發(fā)送了正確的LC*, 這樣的情況下要采用如下操作:
- 登錄到服務(wù)器,輸入
locale -a
可生成的 Locale 保存在 /etc/locale.gen 中,用以下的格式來定義:
[language][_TERRITORY][.CODESET][@modifier]. 要開啟某個Locale,反注釋對應(yīng)的行即可。
- 查看有沒有 en_US.UTF-8,如果沒有則執(zhí)行第3步
- 編輯
/etc/locale.gen文件,反注釋en_US.UTF-8 UTF-8一行. - 執(zhí)行生成命令
locale-gen
-
斷開ssh,然后重新連接即可,之前不能正確顯示的中文字符就可以顯示了
正確設(shè)置locale
如果locale-gen沒有安裝則安裝該包
apt-get install -y locales locales-all
參考:
Mac OS X ssh登陸Linux是終端提示cannot change locale (UTF-8)
用 Mac OS X 自帶的 SSH 登陸 Linux 后出現(xiàn)中文亂碼,如何解決?
archLinux wiki
