關(guān)于locale問題 warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

登陸阿里云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)來說都是不存在的。

那么有兩種解決方法:

  1. 如果使用zsh需要使用 vim ~/.zshrc在文件末
export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

然后source ~/.zshrc使設(shè)置生效。

  1. 不發(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é)果就是無法正確的顯示非英文字符


未正確設(shè)置locale

而Mac本身確實(shí)發(fā)送了正確的LC*, 這樣的情況下要采用如下操作:

  1. 登錄到服務(wù)器,輸入
locale -a 

可生成的 Locale 保存在 /etc/locale.gen 中,用以下的格式來定義:
[language][_TERRITORY][.CODESET][@modifier]. 要開啟某個Locale,反注釋對應(yīng)的行即可。

  1. 查看有沒有 en_US.UTF-8,如果沒有則執(zhí)行第3步
  2. 編輯 /etc/locale.gen文件,反注釋 en_US.UTF-8 UTF-8 一行.
  3. 執(zhí)行生成命令
locale-gen
  1. 斷開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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容