CentOS 6和语言环境错误

我刚刚安装了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.utf8en_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个设置:

  1. 在我的默认系统ssh_config中,我要求系统传递这些variables。

发送语言环境相关的环境variablesSendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

  1. 在我的源主机上,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"

保存并退出,注销并返回。