当我运行perl时,我得到警告:

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

我该怎么解决呢?


当前回答

在Arch Linux中使用英国键盘和地区,我有以下错误:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.utf8"

在/etc/profile中导出我的locale并没有修复它。 不过,我确实通过编辑/etc/locale修复了这个问题同时启用en_US. gen。perl期望找到的Utf8语言环境,并运行local-gen。

(我使用的pac-manager使用AUR的一大堆perl模块,所以在我的特殊情况下重新安装perl将是一个麻烦。)

其他回答

如果您在CentOS中运行chroot,请尝试手动将有此问题的帐户的/usr/lib/locale复制到chroot环境。

这通常意味着您还没有正确地在Linux机器上设置区域设置。

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

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

另参见man locale-gen。

你的操作系统不知道en_US.UTF-8。

你没有提到具体的平台,但我可以重现你的问题:

% uname -a
OSF1 hunter2 V5.1 2650 alpha
% perl -e exit
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

我猜您使用ssh从一台新的桌面计算机连接到这台较旧的主机。通常在/etc/ssh/sshd_config中包含

AcceptEnv LANG LC_*

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

如果你不需要完整的区域设置,警告会提示你如何压制它:

% env LANG=C perl -e exit
%

或与Bash:

$ LANG=C perl -e exit
$ 

要想永久解决问题,请选择其中之一

在旧的主机上,在shell的初始化文件中设置LANG环境变量。 在客户端修改环境,例如,使用命令LANG=C ssh hunter2而不是ssh hunter2。 如果您拥有管理员权限,可以通过注释掉本地/etc/ssh/ssh_config文件中的SendEnv LANG LC_*行来阻止ssh发送环境变量。(多亏了这个回答。有关更多信息,请参阅OpenSSH中的Bug 1285。)

对我来说,我通过编辑.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

仅适用于macOS和Mac OS X用户

我在使用Git时也得到了同样的警告

要解决此警告,取消选中“在启动时设置语言环境变量”选项并重新启动终端。下面的屏幕截图代表了我的终端设置。