How to fix a locale setting warning from Perl?
当我运行
1 2 3 4 5 6 7 | perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG ="en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). |
我该怎么修?
以下是如何在Mac OS Lion(10.7)或Cygwin(Windows 10)上解决此问题:
在主机上的bashrc或bash_概要文件中添加以下行:
1 2 3 | # 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:
1 2 3 | # Setting for the new UTF-8 terminal support in Lion LC_CTYPE=en_US.UTF-8 LC_ALL=en_US.UTF-8 |
你的操作系统不知道
您没有提到具体的平台,但我可以重现您的问题:
1 2 3 4 5 6 7 8 9 |
我猜你是用ssh从一台更新的台式机连接到这个旧主机的。
1 | AcceptEnv LANG LC_* |
它允许客户机将这些环境变量的值传播到新的会话中。
如果不需要完整的区域设置,警告会提示您如何抑制它:
1 2 |
或用巴什:
1 2 |
对于永久修复,请选择
如果使用debootstrap创建rootfs,则需要生成区域设置。您可以通过运行:
1 2 3 4 5 | # (optional) enable missing locales sudo nano /etc/locale.gen # then regenerate sudo locale-gen |
此提示来自:https://help.ubuntu.com/community/xen
这通常意味着您没有在Linux设备上正确设置区域设置。
在Debian或Ubuntu上,这意味着你需要
1 2 | $ sudo locale-gen $ sudo dpkg-reconfigure locales |
另请参见man locale-gen。
用途:
1 2 3 4 | 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。我不知道为什么-但是locale gen没有结果。
重要!这是暂时的解决办法。它必须为每个会话运行。
仅限MacOS和Mac OS X用户
我在使用Git时收到同样的警告
要解决此警告,请取消选中
这是Ubuntu中的简单修复。必须从头生成区域设置,从命令行运行以下命令:
1 2 | sudo locale-gen en_US en_US.UTF-8 sudo dpkg-reconfigure locales |
这应该创建区域设置,然后重新配置它们。
我现在用这个:
1 2 3 4 | $ cat /etc/environment ... LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 |
然后注销ssh会话并再次登录。
老回答:
只有这一点帮助了我:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | $ 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 |
在
1 2 3 4 | LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LC_TYPE=en_US.UTF-8 |
在Debian搜索了很多次之后,这就成功了。
第一:
1 | sudo apt-get purge locales |
然后:
1 | sudo aptitude install locales |
著名的:
1 | sudo dpkg-reconfigure locales |
这将RID区域设置系统,然后重新安装区域设置,并将libc6从2.19降级到2.13,这就是问题所在。然后再次配置区域设置。
对于Ubuntu,使用这个,
1 2 3 4 | #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 |
为我工作。
如果在服务器Linux中使用Mac OS X v10.10(Yosemite)或更高版本进行连接,可以尝试以下步骤。
保留您的文件/etc/ssh/sshd配置原件
穿上你的~/.bash_档案
1 2 | export LANG="en_US" export LC_ALL=$LANG.UTF-8 |
跑
1 | dpkg-reconfigure locales |
并选择"en-u-us.utf-8"
您需要在
1 2 3 4 5 6 | root@host:~# echo -e 'LANG=en_US.UTF-8 LC_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 |
1 2 | perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_ALL to default locale: No such file or directory |
解决方案:
试试这个(UK_A.utf-8是我当前的语言环境。编写您的区域设置,例如en-u.utf-8!)
1 | sudo locale-gen uk_UA.UTF-8 |
这个。
1 | sudo dpkg-reconfigure locales |
1 | sudo nano /etc/locale.gen |
取消对要使用的区域设置的注释(例如,
然后运行:
1 | sudo /usr/sbin/locale-gen |
来源:http://people.debian.org/~schultmc/locales.html
对于我来说,我修复了编辑.bashrc文件add export时的错误。在初始注释后添加。
添加语言支持。1 2 3 4 | 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 |
Kind Regads
对于从MacOS High Sierra上的iterm2.app连接到DigitalOcean或其他云主机提供商并在某些命令上收到此错误的任何人:
1 2 3 4 5 6 7 8 | 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"). |
这解决了我的问题:
我知道这条线很旧,但也许有人会发现它很有用。我知道这有多烦人。
将正确的区域设置添加到
相反,我们应该直接编辑
1 2 3 | LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_CTYPE=en_US |
更改将在下次登录时生效。您可以通过如下方式获取现有shell中的新区域设置:
1 | $ . /etc/default/locale |
这是一个快速的答案。我们将设置在重新启动后未重置的区域设置。首先打开bash文件并对其进行编辑:
1 | nano .bashrc |
将这些行添加到文件中:
1 2 3 | export LC_ALL="en_US.UTF-8" export LANG="en_US.UTF-8" export LANGUAGE="en_US.UTF-8" |
通过重新加载bash激活更改:
1 | source ~/.bashrc |
试验结果:
1 | locale |
在zsh ohmyzsh中,我在
1 2 3 4 5 | # 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 |
通过拆除管线
重新打开一个新的标签页,然后ssh输入,为我工作:)
按照接受的答案:
LANG=C ssh hunter2.
lc_all=c ssh猎人2
在客户方面为我做了这个把戏。
将
像往常一样,魔鬼在细节上…
在Mac OS X v10.7.5(lion)上,为了修复某些django错误,在我的
1 2 3 4 5 6 7 8 | 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时得到了警告。
我的错!正如我后来认识到的,我的系统是
1 | export LANG=en_EN.UTF-8 |
到
1 | export LANG=en_US.UTF-8 |
在我的案例中,对于Debian8.6,我必须更改以下设置:
和
然后重新启动ssh服务。
最后,做了
将缺少的区域设置添加到.bash_配置文件
1 2 3 | echo"export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8">>~/.bash_profile |
然后找到你的.bash_简介
1 | source ~/.bash_profile |
在我的例子中,这是输出:
1 2 3 4 5 | LANGUAGE = (unset), LC_ALL = (unset), LC_PAPER ="ro_RO.UTF-8", LC_ADDRESS ="ro_RO.UTF-8", .... |
解决方案是:
1 | sudo locale-gen ro_RO.UTF-8 |
另一个与Git相关的答案:
问题的根源可能是Git服务器。如果所有其他操作都失败,请尝试在服务器上执行
如果您不关心区域设置问题,可以设置
对于我来说,在Ubuntu 16.04(Xenial Xerus)上,以下内容起作用:
1 2 | root@host:~#locale-gen en_GB.UTF-8 root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8 |
然后重新启动…
以前所有的答案都是错误的。消息是明确的-缺少区域设置。解决方案是添加适当的区域设置。通过编辑/etc/locale.gen文件,删除报告为丢失的区域设置前面的符号,然后发出命令:
1 | $ sudo locale-gen |
这将实际生成/etc/locale.gen中指定的区域设置,因此不会显示消息。
在使用UK键盘/区域设置的ARCHLinux中,我遇到了以下错误:
1 2 3 4 5 | perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG ="en_US.utf8" |
在
/etc/profile 中导出我的区域设置并没有修复它。不过,我通过编辑
/etc/locale.gen 并启用perl 希望找到并运行local-gen 的en_US.utf8 区域。
(我使用的是pac manager,它使用了aur中的一大堆
默认情况下,
1 | AcceptEnv LANG LC_* |
所以可能需要在本地shell中设置这些变量。
如果您在CentOS中运行chroot,请尝试为出现此问题的帐户手动将
如果在通过ssh连接到远程主机时出现此问题,则远程系统可能缺少某些区域设置。我不会重复如何安装和配置区域设置,因为其他答案已经很好地解释了这一点。
正如其他答案所指出的,ssh应该将本地计算机区域设置传递给远程主机。例如,如果设置了澳大利亚区域设置(例如,
要解决此问题,您有几个选项:
在远程主机上安装所需的区域设置,使它们与客户机上配置的区域设置相匹配。
将ssh配置更改为不传递客户端的环境变量。我不推荐这个。
通过从.bashrc和friends导出区域设置来覆盖远程计算机上的区域设置。
尝试重新安装:
1 | localess apt-get install --reinstall locales |
了解有关如何更改默认区域设置的详细信息