我刚刚安装了CentOS 6,每当我通过SSH远程login到系统,我得到以下错误:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)
当我在命令行上键入“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=
可能是什么问题? 我该如何解决这个问题?
在你的SSH服务器上,你是否有通过环境variables设置的语言环境? 在查看我的CentOS 6安装时,我能find的唯一语言环境被标识为en_US.utf8 (使用locale -a命令发现)。 这可能是问题吗?
在我的testing中,当我将LC_ALL环境variables设置为en_US.UTF-8 ,将ssh移到了服务器上,我的locale命令的输出在我的情况下设置为POSIX 。 这与在ssh'ing之前没有设置(即未设置) LC_ALLvariables的情况相同。
当我将LC_ALLvariables设置为en_US.utf8或en_US.utf-8 ,将其ssh移至我的CentOS 6框中,语言环境的输出与源框中的设置相同。
注意我也没有使用UTF的上限。
通过在terminal设置>高级中按照此屏幕截图禁用“在启动时设置语言环境variables”解决这个问题。

注:如果您使用iTerm2,则可以在首选项>configuration文件>terminal中禁用“自动设置区域设置variables”选项
加
LC_CTYPE="en_US.UTF-8"
到/etc/sysconfig/i18n 。
我的工作是在CentOS服务器中添加一个符号链接,如下所示:
ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/UTF-8
一旦你做了这样的命令工作:
export LC_CTYPE=UTF-8
如果不这样做,最后一条命令会失败,并显示以下错误:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
现在,更简单的解决scheme就是将此行添加到服务器中的/ etc / bashrc中:
export LC_CTYPE="en_US.utf8"
从Solaris Xlogin到Centos主机时,我收到了这个特定的消息。
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
问题来自2个设置:
发送语言环境相关的环境variablesSendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
在我的源主机上,thoses设置是这样设置的:
SOURCE#LANG = LC_CTYPE = fr_FR.UTF-8 LC_NUMERIC = fr_FR.UTF-8 LC_TIME = fr_FR.UTF-8 LC_COLLATE = fr_FR.UTF-8 LC_MONETARY = fr_FR.UTF-8 LC_MESSAGES = fr.UTF-8 LC_ALL =
但是,如您所见,LC_MESSAGES被设置为fr.UTF-8,这不是我的目标主机上的选项。
DEST#locale -a | grep fr_FR fr_FR fr_FR@euro fr_FR.iso88591 fr_FR.iso885915@euro fr_FR.utf8
问题已经解决在我的源主机上强制执行.bash_profile:#export LC_ALL = fr_FR.UTF-8 export LANG = fr_FR.UTF-8
我可以通过要求我的目标主机不要从任何ssh连接(通常,或通过为我的用户创build一个区域设置ssh_config文件)来解决它,
在当地的Centos 6.2系统上:这没有帮助:
localedef -i en_US -f UTF-8 en_US.UTF-8
这工作:
localedef --no-archive -i en_US -f UTF-8 en_US.UTF-8
我还删除了/usr/lib/locale locale-archive 。 我不知道这是否有必要。
这是我过去的语言环境错误修复。
运行以下命令:locale-gen
然后编辑/etc/locale.gen。 确保以下内容未被注释:
en_US.UTF-8 UTF-8 en_US ISO-8859-1 generate locale locale-gen
并确保LC_ALL="en_US.UTF-8"处于或添加到/ etc / sysconifg / i18n
示例内容
LANG="en_GB.UTF-8" SYSFONT="latarcyrheb-sun16" LC_ALL="en_US.UTF-8"
与Iterm2 ,是不同的。
转到Iterm2 -> Preferences ,然后转到Profiles选项卡,然后从底部selectTerminal选项卡。
转到Environment类别,取消标记;
自动设置区域设置variables
最后,closures并开始一个新的会话。
编辑/etc/sysconfig/i18n
将LANG="us"更改为LANG="en_US"
保存并退出,注销并返回。