当我运行 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").
我如何解决它?
~/.pam_environment
为一位用户完成的
以下是如何在 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
您的操作系统不知道 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。)
dpkg-reconfigure locales
添加 de_CH.UTF-8(那里不支持但在本地使用)后,消息消失了。
service ssh reload
,它只需要几分之一秒,甚至不会导致当前的 ssh 会话终止。
如果您使用 debootstrap 创建 rootfs,则需要生成语言环境。您可以通过运行:
# (optional) enable missing locales
sudo nano /etc/locale.gen
# then regenerate
sudo locale-gen
此提示来自,https://help.ubuntu.com/community/Xen
$ echo en_US UTF-8 >> /etc/locale.gen
。
locale-gen
不接受参数。它从 /etc/locale.gen
读取。
sudo locale-gen en_US.UTF-8
# en_US.UTF-8 UTF-8
行。
利用:
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
文件中。
local-gen
仅处理 /etc/local.gen
中未注释的语言环境。您可能需要先执行 echo en_US UTF-8 >> /etc/locale.gen
。
LC_CTYPE
这通常意味着您没有在 Linux 机器上正确设置语言环境。
在 Debian 或 Ubuntu 上,这意味着你需要做
$ sudo locale-gen $ sudo dpkg-reconfigure locales
sudo locale-gen es_UY.UTF-8
添加缺少的语言环境
仅适用于 macOS 和 Mac OS X 用户
我在使用 Git 时收到了同样的警告
要解决此警告取消选中 Set locale environment variable on startup
选项并重新启动您的终端。下面的屏幕截图代表我的终端设置。
https://i.stack.imgur.com/y5nUH.png
这是 Ubuntu 中的简单修复。您必须从头开始生成语言环境,从命令行运行以下命令:
sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales
这应该创建语言环境,然后重新配置它们。
pt_BR pt_BR.UTF-8
,这对我来说也很好 - 谢谢。
将以下内容添加到 /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
我现在正在使用这个:
$ 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
在 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 环境中的内容选择您的语言环境。
我们将设置重启后未设置的语言环境。
首先打开 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
对于 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)并重新启动服务器
如果您使用 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"
对于 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 重新启动我的电脑,一切正常
您需要在 /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
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
对我来说,我通过编辑 .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
将正确的语言环境添加到 ~/.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
locale-gen
对于从 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
将缺少的语言环境添加到文件 .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
对于 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
在接受的答案之后:
LANG=C ssh Hunter2.
LC_ALL=C ssh Hunter2
在客户端为我做了诀窍。
使用 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 登录,为我工作:)
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
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
我希望它对你有帮助。
将 LC_ALL="en_GB.utf8"
添加到 /etc/environment
并重新启动。就这样。
导出变量
$ 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 。如果您通过选择所有语言环境来运行它,则需要一些时间来配置。
就我而言,对于 Debian 8.6 (Jessie),我必须更改以下设置:
/etc/ssh/ssh_config` for `#AcceptEnv LANG LC_*
和
sshd_config
为 #SendEnv LANG LC_*
然后重新启动 ssh
服务。
最后,我做到了:
locale-gen en_US.UTF-8
和 dpkg-reconfigure locales
问题的根源
我经历过这种情况,通过 ssh
从一台机器登录到另一台机器。远程机器没有本地机器上的语言环境文件。您可以禁用从本地机器到远程机器的区域设置转发(在文件 /etc/ssh/sshd_config
中删除行 AcceptEnv LANG LC_CTYPE …
)或安装区域设置(在这种情况下不需要更改)。
安装
在 Fedora、Red Hat Linux 和 CentOS 我使用
sudo dnf install langpacks-de
用于德语 (de) 语言包。我注销,登录,它工作。
搜索其他语言包
dnf search langpacks-
更改/激活
列出我使用的可用语言环境
localectl list-locales
并设置一个新的
sudo localectl set-locale de_DE.utf8
一如既往,魔鬼在细节中......
在 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
LC_ALL
会覆盖所有其他变量,所以我宁愿设置LANG=de_AT.UTF-8
和像LC_MESSAGES=en_US.UTF-8
这样的单个变量。如果未设置变量,则返回到LANG
。你也可以例如。unset LC_CTYPE
强制它回退到LANG
。~/.bashrc
为我解决了它...然后必须使用source ~/.bashrc
重新加载... Thnks <3