ChatGPT解决这个技术问题 Extra ChatGPT

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

当我运行 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").

我如何解决它?

当您像错误消息告诉您的那样检查区域设置时发生了什么?
除了安装语言环境,您还可以更改语言环境。在我的 Ubuntu 机器上,这是通过编辑 ~/.pam_environment 为一位用户完成的
在我运行 Ubuntu 的 ODROID-C1 上,问题确实是 ~/.pam_environment 文件。一些变量是 es_US.UTF-8 而不是 en_US.UTF-8。谢谢你。
我在 Cygwin\Babun 上得到了这个。只有重新安装 perl 才能修复它。

P
Peter Mortensen

以下是如何在 Mac OS X v10.7 (Lion) 或 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

如果您使用 Z shell (zsh),请编辑文件 zshrc

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

谢谢,我已经为这个问题寻找了很长时间的解决方案,我一直认为这是我的 Ubuntu 服务器配置的问题,并且似乎没有解决方案有帮助(所有 dkpg-reconfigure 的东西(
因为 LC_ALL 会覆盖所有其他变量,所以我宁愿设置 LANG=de_AT.UTF-8 和像 LC_MESSAGES=en_US.UTF-8 这样的单个变量。如果未设置变量,则返回到 LANG。你也可以例如。 unset LC_CTYPE 强制它回退到 LANG
将这些行放在 .bashrc 中不起作用,但 bash_profile 解决了它!我必须创建文件。
将这些行放入 ~/.bashrc 为我解决了它...然后必须使用 source ~/.bashrc 重新加载... Thnks <3
谢谢,这在 ZSH 和 Mac OS X El Capitan 下的 oh-my-zsh 插件上运行良好,位于 ~/.zshrc 的底部: LC_CTYPE=en_US.UTF-8 LC_ALL=en_US.UTF-8
P
Peter Mortensen

您的操作系统不知道 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 的错误 1285。)


谢谢!使用 git 连接到我的服务器时出现此错误消息。在使用 dpkg-reconfigure locales 添加 de_CH.UTF-8(那里不支持但在本地使用)后,消息消失了。
我有这个问题很久了,...从 sshd_config 中删除“AcceptEnv LANG LC_*”终于解决了。感谢您的提示!
@Greg Bacon,在某些情况下您是否还想在系统范围内设置环境变量,例如通过创建 /etc/environment 文件? help.ubuntu.com/community/…
@HermannIngjaldsson,至少在 Ubuntu(12.10)上,不需要重新启动服务器(在删除“AcceptEnv LANG LC_*”之后)。我刚刚重新加载了 ssh config: service ssh reload,它只需要几分之一秒,甚至不会导致当前的 ssh 会话终止。
在客户端系统附加 'export LC_ALL=C' 然后 'source ~/.bashrc' 解决问题。
k
kritzikratzi

如果您使用 debootstrap 创建 rootfs,则需要生成语言环境。您可以通过运行:

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

# then regenerate
sudo locale-gen

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


locale-gen 不带任何参数(至少在 Debian 稳定版中)。相反,编辑 /etc/locale.gen 以取消注释您想要的语言环境,然后运行 sudo locale-gen
在 Debian 上,您可能需要先执行 $ echo en_US UTF-8 >> /etc/locale.gen
在 Gentoo 上(至少),locale-gen 不接受参数。它从 /etc/locale.gen 读取。
某些发行版不使用配置文件,需要以下内容,sudo locale-gen en_US.UTF-8
@akhmed 您只需要取消注释 # en_US.UTF-8 UTF-8 行。
m
mehov

利用:

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 没有结果。

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


这个对我有用。我只是把它放到我的 .bashrc 文件中。
也为我工作。我只需要设置在 Perl 警告中未设置的两个设置(LANGUAGE 和 LC_ALL)
在 Debian 上,local-gen 仅处理 /etc/local.gen 中未注释的语言环境。您可能需要先执行 echo en_US UTF-8 >> /etc/locale.gen
LC_CTYPE 可能是什么?
应该是 LC_CTYPE
S
Sinan Ünür

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

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

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

另见man locale-gen


没有解决这里的问题
dpkg-reconfigure locales - 为我解决了这个问题,debian 7.1
dpkg-reconfigure locales 自身失败,并出现与一开始试图修复的相同 perl 语言环境错误消息!!!!
这在 Ubuntu 14.04 中对我有用,尽管我必须先使用 sudo locale-gen es_UY.UTF-8 添加缺少的语言环境
@matteo 只有第一次,在它修复错误之前。再试一次,它应该被修复。
C
Community

仅适用于 macOS 和 Mac OS X 用户

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

要解决此警告取消选中 Set locale environment variable on startup 选项并重新启动您的终端。下面的屏幕截图代表我的终端设置。

https://i.stack.imgur.com/y5nUH.png


我尝试了所有其他的,但这个为我做了。我使用 iTerm,它具有相同的字符编码选项。
不幸的是,这破坏了 ZSH(制表符停止工作)
这完全适用于 Mac OS。顺便说一句,这在升级到 macOS Sierra 后就开始发生在我身上。这确实为我解决了这个问题。
这解决了我的问题。从 Sierra 更新到 Mac OS X High Sierra 后,它开始发生在我身上。
是的。我使用 iTerm。擦除问题 Mac 系统设置修复了一些 Mac 崩溃,但在我通过 Mac / iTerm 连接的长期稳定的 CentOS 服务器上运行 Perl 时导致了此问题。禁用连接时设置的自动区域设置修复了它。 iTerm -> Preferences -> Profiles->Terminal->Environment->自动设置语言环境变量。取消选中此项,然后重新启动 iTerm。
P
Peter Mortensen

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

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

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


即使使用 pt_BR pt_BR.UTF-8,这对我来说也很好 - 谢谢。
m
mehov

将以下内容添加到 /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

.. 我收到警告说在 /etc/environment 中设置区域设置已被弃用,而应在 /etc/default/locale 中设置。目前两者似乎都有效。
应该是 LC_CTYPE
w
warvariuc

我现在正在使用这个:

$ 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 上对我来说很好,非常感谢。
P
Peter Mortensen

在 Debian 上,经过大量搜索,这成功了。

第一的:

sudo apt-get purge locales

然后:

sudo aptitude install locales

还有著名的:

sudo dpkg-reconfigure locales

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


dpkg-reconfigure locales 就是所需要的。 sudo 如果您是 sudo 类型的人,或者以 root 身份执行。然后根据您在 shell 环境中的内容选择您的语言环境。
dpkg-reconfigure locales 应该是所有需要的。在您尝试了 100 次并环顾互联网后,您所看到的就是这些,但问题仍然无法自行解决,请尝试上述方法。然后回来投票。 :)
P
Peter Mortensen

我们将设置重启后未设置的语言环境。

首先打开 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 :)
P
Peter Mortensen

对于 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)并重新启动服务器
...而不是为我。 “为你工作”通常不是一个足够好的标准。我建议尝试我在下面发布的内容
P
Peter Mortensen

如果您使用 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 并选择 "en_US.UTF-8"


P
Peter Mortensen

对于 Debian 用户,在修改我的语言环境以更改机器语言后,我遇到了这个问题。这就是我所做的:

修改.bashrc:export LANG=fr_FR.UTF-8 export LC_ALL=fr_FR.UTF-8 在文件etc/locale.gen -> sudo locale-gen 中取消注释行fr_FR.UTF-8 生成缺少的包 sudo update-locale sudo dpkg-reconfigure locales 将我的语言环境配置为 fr_FR.UTF-8 在 etc/default/locale 文件中添加额外的行: LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LC_TYPE=en_US .UTF-8 重新启动我的电脑,一切正常


有时 5. 是唯一有效的方法。还是有点被这种行为搞糊涂了。
g
glarrain

您需要在 /etc/default/locale 中适当配置语言环境,logout, login,然后运行常规命令

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

这些步骤对我有用(Ubuntu server 14.04)。要点是注销并再次登录。
b
bogdanvlviv
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

谢谢,这解决了我的问题,在这样做并重新安装后。
P
Peter Mortensen
sudo nano /etc/locale.gen

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

然后运行:

sudo /usr/sbin/locale-gen

来源:Configuring Locales


我在美国工作的公司拥有一个拥有国际客户的 git 服务器。 GB 人群抱怨他们通过 ssh 进行的 git 克隆会由于语言环境的差异而出现问题。这应用在服务器上为他们解决了这个问题。
P
Peter Mortensen

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

应该不需要使用 LC_ALL,因为它是在调试期间使用的。 LC_ALL 覆盖所有区域设置。
N
Nuvanda

将正确的语言环境添加到 ~/.bashrc~/.bash_profile/etc/environment 等可以解决问题,但不建议这样做,因为它会覆盖 /etc/default/locale 中的设置,这充其量是令人困惑的,并且可能导致在最坏的情况下没有一致地应用语言环境。

相反,应该直接编辑 /etc/default/locale,它可能看起来像这样:

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

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

$ . /etc/default/locale

此步骤后需要重新启动系统
您可以简单地在“/etc/locale.gen”中的所需语言环境中进行注释,然后运行:locale-gen
P
Peter Mortensen

对于从 macOS v10.13 (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").

这解决了我的问题:

https://i.stack.imgur.com/Yvtj6.png


是的,这是 iterm2 中的设置!谢谢!
P
Peter Mortensen

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

D
David Morales

对于 Ubuntu 服务器和 Debian:

无需在 bashrc 中创建导出或处理 dpkg-reconfigure。

只需将 /etc/default/locale 的内容替换为:

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

P
Peter Mortensen

在接受的答案之后:

LANG=C ssh Hunter2.

LC_ALL=C ssh Hunter2

在客户端为我做了诀窍。


在 OSX 10.10.3 上为我工作,而只有“LANG=C”是不够的。谢谢亚历克斯!
R
Rip3rs

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

重新打开一个新选项卡并通过 SSH 登录,为我工作:)


什么是“zsh ohmyzsh”?
ZSH 是一种不同类型的终端,与标准终端不同。哦。我的 ZSH 旨在改进同一个终端。来自网站:Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout... ohmyz.sh
C
Canberk Sinangil

Debian GNU/Linux 11(靶心)

我在 GCP 中创建了一个全新的 VM 实例后遇到了这个问题。

基本上,我刚刚运行了以下

$ sudo apt-get update
$ sudo apt-get upgrade

在这里我得到了错误

https://i.stack.imgur.com/92aEv.png

perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LC_TERMINAL = "iTerm2",
LANG = "C"
are supported and installed on your system.

这是我修复它的方法。

首先安装语言环境。

$ sudo apt-get install locales

打开语言环境文件(使用您喜欢的编辑器)。

$ sudo nano /etc/default/locale

添加以下内容并保存。

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

运行以下。

$ sudo localedef -i en_US -f UTF-8 en_US.UTF-8

重启你的终端。

运行命令测试并通过 ctrl + d 关闭它。

$ perl

注意:我创建了一个实例来测试我的解决方案以确保。如果它不适合你,请告诉我。

https://i.stack.imgur.com/cycYN.png

我希望它对你有帮助。


P
Peter Mortensen

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


S
Surender

导出变量

$ 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

下一次运行

$ sudo locale-gen
$ sudo dpkg-reconfigure locales 

当您运行 dpkg-reconfigure locales 时,它会要求您选择语言环境,请选择 en_US.UTF-8 。如果您通过选择所有语言环境来运行它,则需要一些时间来配置。


P
Peter Mortensen

就我而言,对于 Debian 8.6 (Jessie),我必须更改以下设置:

/etc/ssh/ssh_config` for `#AcceptEnv LANG LC_*

sshd_config#SendEnv LANG LC_*

然后重新启动 ssh 服务。

最后,我做到了:

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


P
Peter Mortensen

问题的根源

我经历过这种情况,通过 ssh 从一台机器登录到另一台机器。远程机器没有本地机器上的语言环境文件。您可以禁用从本地机器到远程机器的区域设置转发(在文件 /etc/ssh/sshd_config 中删除行 AcceptEnv LANG LC_CTYPE …)或安装区域设置(在这种情况下不需要更改)。

安装

FedoraRed Hat LinuxCentOS 我使用

sudo dnf install langpacks-de

用于德语 (de) 语言包。我注销,登录,它工作。

搜索其他语言包

dnf search langpacks-

更改/激活

列出我使用的可用语言环境

localectl list-locales

并设置一个新的

sudo localectl set-locale de_DE.utf8

P
Peter Mortensen

一如既往,魔鬼在细节中......

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

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅