問題症狀
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
解決方法
本地化是指不同地區用戶在鍵盤上輸入不同語言的字符集。例如 en_US 表示美國英語字符集,因此只有正確設置了服務器的字符集,服務器才能理解用戶的輸入字符。setlocale 命令可以幫助用戶來設置本地化字符集。
出現以上問題是因為服務器無法理解 en_US.UTF-8 字符集,因此首先要在服務器上生成 en_US.UTF-8 字符集:
sudo locale-gen en_US.UTF-8
然后使用最新生成的字符集更新本地倉庫:
sudo dpkg-reconfigure locales
最后更新 /etc/default/locale 文件,例如更新前的文件內容為:
LANG=C.UTF-8
更新后:
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
環境變量 LC_ALL 會覆寫所有的本地化設置(在某些情況下 $LANGUAGE 不會被覆寫),例如 LC_NAME, LC_ADDRESS 等等。設置 LC_ALL=en_US.UTF-8 表示所有的本地化設置都使用 en_US.UTF-8。
重新登錄服務器,warning 警告不再出現,問題解決。
Ref:
bash: warning: setlocale: LC_ALL: cannot change locale (en_US)
