如何解决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其中一个

  1. 在较旧的主机上,在shell的初始化文件中设置LANG环境variables。
  2. 在客户端修改你的环境, 例如 ,而不是ssh hunter2 ,使用命令LANG=C ssh hunter2
  3. 如果您拥有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 

这个提示来自https://help.ubuntu.com/community/Xen

使用:

 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 startupSet 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中进行连接,则可以尝试以下步骤。

  1. 保持文件/ etc / ssh / sshd-config的原始文件

  2. 把你的〜/ .bash_profile

     export LANG="en_US" export LC_ALL=$LANG.UTF-8 
  3.  dpkg-reconfigure locales 

    并select“en_US.UTF-8”

您需要在/etc/default/localelogout,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-8dpkg-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 

阅读更多信息如何更改默认语言环境