如何解决Perl的语言环境设置警告?
当我运行perl
,我得到警告:
perl:警告:设置区域设置失败。 perl:警告:请检查您的区域设置: LANGUAGE =(unset), LC_ALL =(未设定), LANG =“en_US.UTF-8” 支持并安装在您的系统上。 perl:警告:回落到标准语言环境(“C”)。
我该如何解决?
你的操作系统不知道en_US.UTF-8
。
你没有提到一个特定的平台,但我可以重现你的问题:
%uname -a OSF1 hunter2 V5.1 2650 alpha %perl -e出口 perl:警告:设置区域设置失败。 perl:警告:请检查您的区域设置: LC_ALL =(未设定), LANG =“en_US.UTF-8” 支持并安装在您的系统上。 perl:警告:回落到标准语言环境(“C”)。
我的猜测是你用ssh从一台较新的台式机连接到这台较旧的主机。 /etc/ssh/sshd_config
通常包含它
AcceptEnv LANG LC_*
它允许客户端将这些环境variables的值传播到新的会话中。
如果您不需要完整的语言环境,该警告会提示您如何静音。
%env LANG = C perl -e exit %
或与bash:
$ LANG = C perl -e出口 $
对于永久修复,请select其中一个
- 在较旧的主机上,在shell的初始化文件中设置
LANG
环境variables。 - 在客户端修改你的环境, 例如 ,而不是
ssh hunter2
,使用命令LANG=C ssh hunter2
。 - 如果您拥有pipe理员权限,请通过注释掉本地
/etc/ssh/ssh_config
文件中的SendEnv LANG LC_*
行来停止ssh发送环境variables。 (感谢这个答案 。请参阅Bug 1285了解更多OpenSSH。)
以下是在Mac OS Lion(10.7)或Cygwin(Windows 10)上解决的方法:
将以下行添加到主机上的bashrc或bash_profile中:
# Setting for the new UTF-8 terminal support in Lion export LC_CTYPE=en_US.UTF-8 export LC_ALL=en_US.UTF-8
如果您使用zsh,请编辑zshrc:
# Setting for the new UTF-8 terminal support in Lion LC_CTYPE=en_US.UTF-8 LC_ALL=en_US.UTF-8
如果您使用debootstrap创buildrootfs,则需要生成语言环境。 你可以通过运行:
# (optional) enable missing locales sudo nano /etc/locale.gen # then regenerate sudo locale-gen
使用:
export LANGUAGE=en_US.UTF-8 export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_TYPE=en_US.UTF-8
它适用于Debian 。 我不知道为什么 – 但现场没有结果。
重要! 这是一个临时解决scheme。 它必须为每个会话运行。
这通常意味着你没有正确地设置你的Linux机器上的语言环境。
在Debian或Ubuntu上,这意味着你需要这样做
$ sudo locale-gen $ sudo dpkg-reconfigure语言环境
另见man locale-gen 。
仅适用于macOS / OS X用户
我知道这个答案与这个问题没有多大关系,但我只是想回答,所以与Git有相同问题的其他人可以解决它。
在使用Git时,我得到了同样的警告,这让我很烦恼。 这是我得到的
$ git pull perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C").
取消选中Set locale environment variable on startup
的Set locale environment variable on startup
选项,然后重新启动terminal:
这在Ubuntu中很简单。 您必须从头开始生成语言环境,从命令行运行以下命令:
sudo locale-gen en_US en_US.UTF-8 sudo dpkg-reconfigure locales
这应该创build语言环境,然后重新configuration它们。
我现在使用这个:
$ cat /etc/environment ... LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
然后注销SSH会话并重新login。
老答案:
只有这帮助了我:
$ locale locale: Cannot set LC_ALL to default locale: No such file or directory LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE=en_US.UTF-8 LC_NUMERIC=ru_RU.UTF-8 LC_TIME=ru_RU.UTF-8 LC_COLLATE="en_US.UTF-8" LC_MONETARY=ru_RU.UTF-8 LC_MESSAGES="en_US.UTF-8" LC_PAPER=ru_RU.UTF-8 LC_NAME=ru_RU.UTF-8 LC_ADDRESS=ru_RU.UTF-8 LC_TELEPHONE=ru_RU.UTF-8 LC_MEASUREMENT=ru_RU.UTF-8 LC_IDENTIFICATION=ru_RU.UTF-8 LC_ALL= $ sudo su # export LANGUAGE=en_US.UTF-8 # export LANG=en_US.UTF-8 # export LC_ALL=en_US.UTF-8 # locale-gen en_US.UTF-8 Generating locales... en_US.UTF-8... up-to-date Generation complete. # dpkg-reconfigure locales Generating locales... en_AG.UTF-8... done en_AU.UTF-8... done en_BW.UTF-8... done en_CA.UTF-8... done en_DK.UTF-8... done en_GB.UTF-8... done en_HK.UTF-8... done en_IE.UTF-8... done en_IN.UTF-8... done en_NG.UTF-8... done en_NZ.UTF-8... done en_PH.UTF-8... done en_SG.UTF-8... done en_US.UTF-8... up-to-date en_ZA.UTF-8... done en_ZM.UTF-8... done en_ZW.UTF-8... done Generation complete. # exit $ locale LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_CTYPE="en_US.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=en_US.UTF-8
将以下内容添加到/etc/environment
,在Debian和Ubuntu上为我解决了这个问题(当然,修改为匹配您要使用的语言环境):
LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LC_TYPE=en_US.UTF-8
在Debian之后,大量search这个伎俩。
第一:
sudo apt-get purge locales
然后:
sudo aptitude install locales
和着名的:
sudo dpkg-reconfigure locales
这摆脱了语言环境的系统,然后重新安装语言环境并将libc6从2.19降级到2.13这是问题。 然后再configuration区域设置。
如果您使用Mac OS X v10.10 (Yosemite)或更高版本在您的服务器Linux中进行连接,则可以尝试以下步骤。
-
保持文件/ etc / ssh / sshd-config的原始文件
-
把你的〜/ .bash_profile
export LANG="en_US" export LC_ALL=$LANG.UTF-8
-
跑
dpkg-reconfigure locales
并select“en_US.UTF-8”
您需要在/etc/default/locale
, logout,login中正确configuration区域/etc/default/locale
,然后运行常规命令
root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale root@host:~# exit local-user@local:~$ ssh root@host root@host:~# locale-gen en_US.UTF-8 root@host:~# dpkg-reconfigure locales
perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_ALL to default locale: No such file or directory
解:
试试这个( uk_UA.UTF-8是我当前的语言环境,编写你的语言环境,例如en_US.UTF-8 !)
sudo locale-gen uk_UA.UTF-8
和这个。
sudo dpkg-reconfigure locales
sudo nano /etc/locale.gen
取消注释您要使用的语言环境(例如en_US.UTF-8 UTF-8
):
然后运行:
sudo /usr/sbin/locale-gen
资料来源: http : //people.debian.org/~schultmc/locales.html
遵循接受的答案:
LANG = C ssh hunter2。
LC_ALL = C ssh hunter2
在客户端做了我的伎俩。
将LC_ALL="en_GB.utf8"
添加到/etc/environment
并重启。 就这样。
一如往常,魔鬼在细节…
在Mac OS X v10.7.5 (Lion)中,为了解决一些Django错误,在我的~/.bash_profile
设置了:
export LANG=en_EN.UTF-8 export LC_COLLATE=$LANG export LC_CTYPE=$LANG export LC_MESSAGES=$LANG export LC_MONETARY=$LANG export LC_NUMERIC=$LANG export LC_TIME=$LANG export LC_ALL=$LANG
而反过来很长一段时间,我使用Perl时得到了这个警告。
我的错! 正如我后来意识到的那样,我的系统是en_US.UTF-8
! 我只是通过改变来修复它
export LANG=en_EN.UTF-8
至
export LANG=en_US.UTF-8
用zsh ohmyzsh我把这个添加到.zshrc:
# You may need to manually set your language environment LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 LC_ALL=en_US.UTF-8
通过删除行export LANG=en_US.UTF-8
重新打开一个新的标签,并在SSHed中,为我工作:)
所有以前的答案都是错误的。 消息很明显 – 缺less语言环境。 解决scheme是添加适当的区域设置。 您可以通过编辑/etc/locale.gen文件来实现,删除报告为缺失的语言环境前面的#号,然后发出以下命令:
$ sudo locale-gen
这实际上会生成/etc/locale.gen中指定的语言环境,因此不会显示消息。
就我而言,这是输出:
LANGUAGE = (unset), LC_ALL = (unset), LC_PAPER = "ro_RO.UTF-8", LC_ADDRESS = "ro_RO.UTF-8", ....
解决scheme是:
sudo locale-gen ro_RO.UTF-8
对我来说,在Ubuntu 16.04 (Xenial Xerus)上,以下工作:
root@host:~#locale-gen en_GB.UTF-8 root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8
然后重启…
将缺less的语言环境添加到.bash_profile
echo "export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8">>~/.bash_profile
然后源代码.bash_profile
source ~/.bash_profile
如果您在CentOS中运行chroot,请尝试手动复制/usr/lib/locale
。
另一个Git相关的答案:
问题的根源可能是Git 服务器 。 如果一切都失败,请尝试在服务器上执行dpkg-reconfigure locales
(或适用于您的发行版的任何内容)。
积分:这个技巧是从修复烦人的Perl:警告:在Ubuntu服务器上设置语言环境失败,并解决了我的情况下的问题。
我花了很多时间试图解决这个问题,最后我发现它在修复Debian中的语言环境问题 – 镜像 。
ssh
默认覆盖LC语言环境variables。 请参阅/etc/ssh/sshd_config
:
AcceptEnv LANG LC_*
所以也许你需要在你的本地shell中设置这些variables。
如果您不关心区域设置问题,则可以设置PERL_BADLANG=0
。 当然,这可能会导致不正确的本地化。
在我的情况下,与debian8.6,我不得不改变设置:
/etc/ssh/ssh_config
为#AcceptEnv LANG LC_*
而sshd_config
为#SendEnv LANG LC_*
然后重新启动ssh服务。
最后,做了
locale-gen en_US.UTF-8
和dpkg-reconfigure locales
对于任何人连接到DigitalOcean或Mac OS高级Sierra上的iTerm2.app的其他云主机提供商,并得到这个错误的一些命令:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
这为我解决了这个问题:
我知道这个线程是老的,但也许有人会发现这个有用的。 我知道这可能是多么烦人。
尝试重新安装:
localess apt-get install --reinstall locales
阅读更多信息如何更改默认语言环境