如何修复来自Perl的语言环境设置警告?


595

当我跑步时perl,我得到警告:

perl:警告:设置区域设置失败。
perl:警告:请检查您的语言环境设置:
    语言=(未设置),
    LC_ALL =(未设置),
    LANG =“ en_US.UTF-8”
在您的系统上受支持并安装。
perl:警告:退回到标准语言环境(“ C”)。

我如何解决它?


当您检查错误消息告诉您的区域设置时,发生了什么?
brian d foy 2010年

3
除了安装语言环境,您还可以更改语言环境。在我的Ubuntu盒子上,这是通过编辑为一个用户完成的~/.pam_environment
Janus Troelsen

在运行Ubuntu的ODROID-C1上,问题确实是〜/ .pam_environment文件。一些变量是es_US.UTF-8而不是en_US.UTF-8。谢谢。
f1vefour

我在Cygwin \ Babun上得到了这个。只有重新安装perl才能修复它。
卢卡斯·苏亚雷斯

Answers:


448

您的操作系统不了解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_*

这允许客户端将这些环境变量的值传播到新会话中。

如果您不需要完整的语言环境,则警告会提示您如何消除它:

%env LANG = C perl -e退出
%

或使用bash:

$ LANG = C perl -e出口
$ 

要永久修复,请选择以下其中一项

  1. 在较旧的主机上,LANG在外壳程序的初始化文件中设置环境变量。
  2. 在客户端上修改您的环境,例如,而不是ssh hunter2使用command LANG=C ssh hunter2
  3. 如果您具有管理员权限,请通过注释掉本地文件中的SendEnv LANG LC_*行来停止ssh发送环境变量。(感谢此答复。有关更多信息,请参见Bug 1285 for OpenSSH。) /etc/ssh/ssh_config

22
谢谢!与git连接到我的服务器时出现此错误消息。在添加de_CH.UTF-8(在那里不支持,但是在本地使用)后dpkg-reconfigure locales,消息消失了。
西蒙·埃格斯特

82
我这个问题已经存在很长时间了,...从sshd_config中删除“ AcceptEnv LANG LC_ *”终于解决了。感谢您的提示!
madc

2
@Greg Bacon,在某些情况下,您是否不想在整个系统范围内设置环境变量,例如通过创建/ etc / environment文件?help.ubuntu.com/community/...
fraxture

25
@HermannIngjaldsson,至少在Ubuntu(12.10)上,不需要重新引导服务器(在删除“ AcceptEnv LANG LC_ *”之后)。我只是重新加载了ssh config:,service ssh reload花费了不到一秒钟的时间,甚至没有导致当前的ssh会话终止。
noamtm 2014年

3
在客户端系统上附加“ export LC_ALL = C”,然后“ source〜/ .bashrc”,即可解决此问题。
EffectiveMatrix

476

以下是在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

6
谢谢,我已经为这个问题寻找了很长时间的解决方案,我一直认为这是我的Ubuntu服务器配置中的问题,而且似乎没有解决方案可以帮到您(所有dkpg-reconfigure东西(
Teemu Kurppa

5
由于会LC_ALL覆盖所有其他变量,因此我宁愿设置LANG=de_AT.UTF-8和设置单个变量,例如LC_MESSAGES=en_US.UTF-8。如果未设置变量,则回退到LANG。您也可以例如。unset LC_CTYPE迫使它回落LANG
David

4
将这些行放在.bashrc中不起作用,但是bash_profile解决了!我必须创建文件。
2013年

5
把这些线放~/.bashrc给我解决...然后必须使用source ~/.bashrc... 重新加载... Thnks <3
Enissay 2013年

5
谢谢,此方法在ZSH和Mac OS X El Capitan下的oh-my-zsh插件上正常工作,位于〜/ .zshrc的底部:LC_CTYPE = en_US.UTF-8 LC_ALL = en_US.UTF-8
Valerio Schiavoni

207

如果要使用debootstrap创建rootfs,则需要生成语言环境。您可以通过运行以下命令执行此操作:

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

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


28
这对我来说是真正的解决办法。
Afriza N. Arief

5
locale-gen不接受任何参数(至少在Debian稳定版中)。相反,请编辑/etc/locale.gen以取消注释所需的语言环境,然后运行sudo locale-gen
Sam Watkins 2014年

2
固定于Ubuntu Server
Paschalis,2015年

5
在Debian上,您可能需要先做$ echo en_US UTF-8 >> /etc/locale.gen
akhmed 2015年

1
在Gentoo上(至少),locale-gen不接受参数。它从读取/etc/locale.gen
Pistos

142

采用:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

它适用于Debian。我不知道为什么-但是locale-gen没有结果。

重要!这是一个临时解决方案。必须为每个会话运行它。


13
这个为我工作。我只是将其放入.bashrc文件中。
Anirudh Ramanathan 2014年

2
也为我工作。我只需要设置Perl警告中未设置的两个设置(LANGUAGE和LC_ALL)
laurent 2014年

2
在Debian上,local-gen仅处理在中未注释的语言环境/etc/local.gen。您可能需要先做echo en_US UTF-8 >> /etc/locale.gen
akhmed

这在Elementary OS Freaya(基于Ubuntu)上为我工作
valkirilov

1
LC_ C TYPE可能是?
mixel 2016年

139

通常,这意味着您没有在Linux机器上正确设置语言环境。

在Debian或Ubuntu上,这意味着您需要做

$ sudo locale-gen
$ sudo dpkg-重新配置语言环境

另请参见man locale-gen


30
不能解决此问题
Somatik 2012年

6
dpkg-reconfigure
locales-

4
dpkg-reconfigure语言环境本身会因尝试首先修复的Perl语言环境错误消息而失败!!!
matteo 2014年

10
这为我工作在Ubuntu 14.04,虽然我不得不与第一添加缺少的语言环境sudo locale-gen es_UY.UTF-8
ALF

2
@matteo只有第一次,它可以修复错误。再试一次,它应该已修复。
Zero3'3

91

仅适用于macOS和Mac OS X用户

我在使用Git时收到相同的警告

解决此警告的方法取消选中Set locale environment variable on startup选项,然后重新启动终端。屏幕截图下方显示了我的终端设置。

在此处输入图片说明


3
哇,这么简单,解决了我的问题!谢谢!
Michal 2014年

3
我尝试了所有其他方法,但是这一方法为我做了。我使用iTerm,它具有相同的字符编码选项。
迈克尔·莫里森

2
不幸的是,这破坏了ZSH(制表停止工作)
基督教徒

1
对于Mac OS,这完全可以解决问题。顺便说一句,在升级到macOS Sierra之后,这种情况立即就发生了。这确实为我解决了这个问题。
Paulo Malvar

1
这解决了我的问题。从Sierra升级到Mac OS X High Sierra之后,它开始发生在我身上。
Lucian Irimie '18年

36

这是Ubuntu中的简单修复。您必须从头开始生成语言环境,从命令行运行以下命令:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales

这应该创建语言环境,然后重新配置它们。


即使使用,这对我也很好pt_BR pt_BR.UTF-8-谢谢。
Marcos Freitas

29

添加以下内容/etc/environment为我解决了在Debian和Ubuntu上的问题(当然,请进行修改以匹配您要使用的语言环境):

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

7
..我收到一条警告,说不建议在中设置区域设置,/etc/environment而应在中设置/etc/default/locale。两者似乎都现在工作。
joscarsson 2014年

应该是LC_CTYPE
aexl

25

我现在正在使用这个:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

然后退出SSH会话,然后再次登录。

旧答案:

只有这帮助了我:

$ 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

非常感谢我在Ubuntu 15.04上的正常运行。
Goke Obasa

22

经过大量搜索后,在Debian上实现了成功。

第一:

sudo apt-get purge locales

然后:

sudo aptitude install locales

和著名的:

sudo dpkg-reconfigure locales

这会摆脱语言环境系统,然后重新安装语言环境并将libc6从2.19降级到2.13,这就是问题所在。然后再次配置语言环境。


4
dpkg-reconfigure locales就是所需要的。sudo如果您是sudo类型的家伙,或者以root身份执行。然后根据您的Shell环境中的内容选择您的语言环境。
mknaf

6
dpkg-reconfigure语言环境应该是所需要的。在尝试了100次并环顾了互联网之后,您就已经知道了一切,而问题仍然无法解决,请尝试上述方法。然后回来投票。:)
tkjef

1
终于对这个问题做出了非骇客的回答,绝对应该被接受!
php_nub_qq

17

这是一个快速的答案。我们将设置重启后未设置的语言环境。首先打开bash文件并对其进行编辑:

nano .bashrc

将这些行添加到文件中:

export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LANGUAGE="en_US.UTF-8"

通过重新加载bash激活更改:

source ~/.bashrc

试验结果 :

locale

Raspbian和ubuntu服务器16.04
才是

13

对于Ubuntu使用此功能,

#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

为我工作。


通过删除文件中的所有内容/etc/default/locale并仅放置vars的定义(删除单词export)并重新启动服务器
它对

12

如果使用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

    然后选择“ en_US.UTF-8”


10
sudo nano /etc/locale.gen

取消注释要使用的语言环境(例如 en_US.UTF-8 UTF-8):

然后运行:

sudo /usr/sbin/locale-gen

资料来源:http : //people.debian.org/~schultmc/locales.html


我在美国工作的公司托管有国际客户的git服务器。GB人群抱怨说,由于语言环境的差异,他们在ssh上的git克隆会出现问题。这在服务器上应用为他们解决了这个问题。
Therealstubot

10

您需要在/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

4
这些步骤对我有用(Ubuntu服务器14.04)。要点是注销并再次登录。
liberborn 2015年

9
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

谢谢您,这样做并重新安装后,解决了我的问题。
madprops

7

对我来说,我修复了编辑.bashrc文件添加导出的错误。在初始评论后添加。

添加语言支持。

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

亲切的Regad,


6

添加正确的语言环境~/.bashrc~/.bash_profile/etc/environment和类似就能解决问题,但它是不推荐,因为它覆盖的设置/etc/default/locale,这是最好混乱,并可能导致在最坏的情况不断地进行应用不是语言环境。

相反,应该/etc/default/locale直接进行编辑,如下所示:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

该更改将在您下次登录时生效。您可以通过以下方式在现有的shell中获取新的语言环境/etc/default/locale

$ . /etc/default/locale

1
需要在此步骤后重新启动系统
Ghanshyam Bagul 18/12/29

您只需在“ /etc/locale.gen”中在所需的语言环境中注释,然后运行:locale-gen
Dave Everitt

5

对于从MacOS High Sierra上的iTerm2.app连接到DigitalOcean或其他云托管提供商的人,并在某些命令上出现此错误:

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").

这为我解决了问题:

在此处输入图片说明

我知道这个线程很旧,但是也许有人会觉得这个有用。我知道这有多烦人。


是的,这是iterm2中的此设置!谢谢!
布莱恩·奥尔森

4

遵循公认的答案:

LANG = C ssh hunter2。

LC_ALL = C ssh hunter2

在客户端上为我做了把戏。


在OSX 10.10.3上为我工作,而仅“ LANG = C”还不够。谢谢亚历克斯!
基督教徒

4

使用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登录,对我有用:)


3

添加LC_ALL="en_GB.utf8"/etc/environment和重新启动。就这样。


2

与往常一样,细节决定成败...

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


2

以前所有的答案都是错误的。消息很清楚-缺少语言环境。解决方案是添加适当的语言环境。为此,您可以编辑/etc/locale.gen文件,删除报告为丢失的语言环境前面的#号,然后发出以下命令:

$ sudo locale-gen

这实际上将生成/etc/locale.gen中指定的语言环境,因此将不会显示该消息。


这是一个简单答案,古代的Debian(6)为我工作。所有其余的都过于复杂,并且偏离了轨道。
戴夫·埃弗里特

2

就我而言,使用debian8.6,我必须在以下位置更改设置:

/etc/ssh/ssh_config 对于 #AcceptEnv LANG LC_*

sshd_config#SendEnv LANG LC_*

然后重新启动ssh服务。

最后,做了

locale-gen en_US.UTF-8dpkg-reconfigure locales


2

将缺少的语言环境添加到.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


1

ssh默认情况下会覆盖LC语言环境变量。见/etc/ssh/sshd_config

AcceptEnv LANG LC_*

因此,也许您需要在本地shell中设置这些变量。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.