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

时间:2010-03-23 12:27:19

标签: perl locale

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

我该如何解决?

41 个答案:

答案 0 :(得分:434)

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

答案 1 :(得分:401)

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

要获得永久性修复,请选择

之一
  1. 在较旧的主机上,在shell的初始化文件中设置LANG环境变量。
  2. 在客户端修改您的环境,例如,而不是ssh hunter2,请使用命令LANG=C ssh hunter2
  3. 如果您拥有管理员权限,请通过在本地 SendEnv LANG LC_*文件中注释掉/etc/ssh/ssh_config行来停止ssh发送环境变量。 (感谢this answer。有关详情,请参阅Bug 1285了解OpenSSH。)

答案 2 :(得分:186)

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

来完成此操作
# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

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

答案 3 :(得分:133)

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

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

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

另见man locale-gen

答案 4 :(得分:129)

使用:

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

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

答案 5 :(得分:88)

对于macOS&仅限Mac OS X用户

使用Git

时,我收到同样的警告

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

enter image description here

答案 6 :(得分:35)

在Ubuntu中进行简单的修复。您必须从头开始生成Locales,从命令行运行以下命令:

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

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

答案 7 :(得分: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

答案 8 :(得分:23)

将以下内容添加到/etc/environment为我修复了Debian和Ubuntu上的问题(当然,修改以匹配您要使用的区域设置):

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

答案 9 :(得分:20)

经过多次搜索后,在Debian上找到了这个技巧。

第一

sudo apt-get purge locales

然后:

sudo aptitude install locales

和着名的:

sudo dpkg-reconfigure locales

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

答案 10 :(得分: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

为我工作。

答案 11 :(得分:11)

如果您使用Mac OS X v10.10(Yosemite)或更高版本连接服务器Linux,则可以尝试以下步骤。

  1. 保留文件/ etc / ssh / sshd-config original

  2. 穿上你的〜/ .bash_profile

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
    
  3. 运行

    dpkg-reconfigure locales
    

    然后选择“en_US.UTF-8”

答案 12 :(得分: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

答案 13 :(得分:9)

sudo nano /etc/locale.gen

取消注释您要使用的区域设置(例如en_US.UTF-8 UTF-8):

然后运行:

sudo /usr/sbin/locale-gen

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

答案 14 :(得分: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

答案 15 :(得分: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

亲切的注册,

答案 16 :(得分:6)

这是一个快速的答案。我们将设置重启后未设置的语言环境。 首先打开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

答案 17 :(得分:5)

将正确的区域设置添加到 <html> <head> </head> <body> <div id='header'> TEST </div> <div id='content'> <h1>Title H1</h1> <h2>TITLE H2</h2> <p>The quick brown fox jumps over the lazy dog</p> </div> <div class='section'> <h1>SUPERCONDUCTIVITY</h1> <p> Superconductivity is a phenomenon of exactly zero electrical resistance and expulsion of magnetic flux fields occurring in certain materials, called superconductors, when cooled below a characteristic critical temperature. It was discovered by Dutch physicist Heike Kamerlingh Onnes on April 8, 1911, in Leiden. Like ferromagnetism and atomic spectral lines, superconductivity is a quantum mechanical phenomenon. It is characterized by the Meissner effect, the complete ejection of magnetic field lines from the interior of the superconductor as it transitions into the superconducting state. The occurrence of the Meissner effect indicates that superconductivity cannot be understood simply as the idealization of perfect conductivity in classical physics. <br> <br> The electrical resistance of a metallic conductor decreases gradually as temperature is lowered. In ordinary conductors, such as copper or silver, this decrease is limited by impurities and other defects. Even near absolute zero, a real sample of a normal conductor shows some resistance. In a superconductor, the resistance drops abruptly to zero when the material is cooled below its critical temperature. An electric current through a loop of superconducting wire can persist indefinitely with no power source. <br> <br> In 1986, it was discovered that some cuprate-perovskite ceramic materials have a critical temperature above 90 K (−183 °C). Such a high transition temperature is theoretically impossible for a conventional superconductor, leading the materials to be termed high-temperature superconductors. The cheaply-available coolant liquid nitrogen boils at 77 K, and thus superconduction at higher temperatures than this facilitates many experiments and applications that are less practical at lower temperatures. </p> </div> </body> </html>~/.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

答案 18 :(得分: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").

这解决了我的问题:

enter image description here

我知道这个帖子很老但也许有人会觉得这个很有用。我知道这有多烦人。

答案 19 :(得分:4)

按照接受的答案:

  

LANG = C ssh hunter2。

LC_ALL = C ssh hunter2

在客户端为我做了诀窍。

答案 20 :(得分: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

重新打开一个新标签并进入SSH,为我工作:)

答案 21 :(得分:3)

问题根源

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

安装

在我使用的FedoraRed Hat LinuxCentOS

sudo dnf install langpacks-de

用于德语(de)语言包。我注销了,然后登录了。

使用

搜索其他langpack
dnf search langpacks-

更改/激活

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

localectl list-locales

并设置一个新的

sudo localectl set-locale de_DE.utf8

答案 22 :(得分:3)

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

答案 23 :(得分:2)

在我的情况下,使用debian8.6,我不得不更改设置:

/etc/ssh/ssh_config

#AcceptEnv LANG LC_*

sshd_config

#SendEnv LANG LC_*

然后重启ssh服务。

最后,做了

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

答案 24 :(得分:2)

导出变量

$ 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。如果通过选择所有语言环境来运行它,则将花费一些时间来配置。

答案 25 :(得分: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

答案 26 :(得分:2)

与往常一样,魔鬼在细节......

在我的~/.bash_profile我设置的Mac OS X v10.7.5(狮子座)上修复了一些Django错误:

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

答案 27 :(得分:1)

之前的所有答案都是错误的。消息很明确 - 缺少区域设置。解决方案是添加适当的区域设置。您可以通过编辑/etc/locale.gen文件来执行此操作,删除报告为缺失的区域设置前面的#符号,然后发出命令:

$ sudo locale-gen

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

答案 28 :(得分:1)

对我来说,在Ubuntu 16.04(Xenial Xerus)上,以下工作:

root@host:~#locale-gen en_GB.UTF-8
root@host:~#localectl set-locale LANG=en_GB.UTF-8,LC_ALL=en_GB.UTF-8

然后重启...

答案 29 :(得分:1)

在使用英国键盘/语言环境的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导出我的区域设置无法解决问题。

  • 但我通过修改/etc/locale.gen&amp;也启用了 en_US.utf8期望找到的perl区域设置&amp;正在运行local-gen

(我使用pac-manager,它使用了来自AUR的一大堆perl模块,因此在我的特定情况下重新安装perl会很麻烦)

答案 30 :(得分:1)

如果您不关心语言环境问题,you can set PERL_BADLANG=0。当然,这可能导致错误的本地化。

答案 31 :(得分:1)

默认情况下,

ssh会覆盖LC语言环境变量。见/etc/ssh/sshd_config

AcceptEnv LANG LC_*

所以也许你需要在本地shell中设置这些变量。

答案 32 :(得分:1)

另一个与Git相关的答案:

问题的根源可能是Git 服务器。如果所有其他方法都失败了,请尝试在服务器上执行dpkg-reconfigure locales(或适用于您的发布的任何内容)。

答案 33 :(得分:1)

就我而言,这是输出:

LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ro_RO.UTF-8",
LC_ADDRESS = "ro_RO.UTF-8",
....

解决方案是:

sudo locale-gen ro_RO.UTF-8

答案 34 :(得分:1)

perl -e exit
sudo localedef -i en_US -f UTF-8 en_DE.UTF-8
#                                   DE = German
# Use your country code en lieu of  DE

# The second "perl" should then not complain any more
perl -e exit

localectl list-locales # Just make sure it is OK

答案 35 :(得分:0)

如果在通过ssh连接到远程主机时发生此问题,则远程系统可能缺少某些区域设置。我不打算重复如何安装和配置语言环境,因为其他答案已经很好地解释了这一点。

正如其他答案所指出的那样,ssh应该将您的本地计算机区域设置传递给远程主机。例如,如果您设置了澳大利亚语言区域设置(例如en_AU.UFT-8),并且您要连接到只有en_US.UTF-8附带的新设置的Ubuntu服务器,那么您将收到此警告。

要解决此问题,您有以下几种选择:

  1. 在远程主机上安装所需的区域设置,使其与客户端上配置的区域设置相匹配。

  2. 将SSH配置更改为不通过您的客户端&#39;环境变量。我不推荐这个。

  3. 通过从.bashrc和朋友导出区域设置来覆盖远程计算机上的区域设置。

答案 36 :(得分:0)

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

答案 37 :(得分:0)

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

  1. 修改.bashrc:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { ThunkDispatch } from 'redux-thunk';
import { fetchArticle } from '../store/actions';
import { RouteComponentProps } from 'react-router-dom';
import Article from '../components/Article/Article'
import { AnyAction } from 'redux';

// article
interface IArticle {
  title: string,
  author: string
}

// state
interface MyState {
  list: [],
  article: IArticle
}

// stateMapToProps
interface StateToProps {
  article: IArticle
}

// router match
interface MatchParams {
  id: string
}

// own props
interface MyOwnProps extends RouteComponentProps<MatchParams> {
  article: IArticle,
  getArticle: (id: string) => Promise<void>
}

class ArticleContainer extends Component<MyOwnProps, {}> {
  constructor(props: MyOwnProps) {
    super(props);
  }

  componentDidMount() {
    const { getArticle } = this.props;
    const id = this.props.match.params.id
    getArticle(id)
  }

  render() {
    const { article } = this.props;
    return (
      <Article article={article}></Article>
    )
  }
}

const mapStateToProps = (state: MyState): StateToProps => {
  return {
    article: state.article
  }
}

const mapDispatchToProps = (dispatch: ThunkDispatch<any, any, AnyAction>) => {
  return {
    getArticle: (id: string) => dispatch(fetchArticle(id))
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(ArticleContainer)
  1. 在文件export LANG=fr_FR.UTF-8 export LC_ALL=fr_FR.UTF-8 -> fr_FR.UTF-8中取消注释行etc/locale.gen,以生成丢失的包
  2. sudo locale-gen
  3. sudo update-locale将我的语言环境配置为sudo dpkg-reconfigure locales
  4. fr_FR.UTF-8文件中添加额外的行:
etc/default/locale
  1. 重新启动计算机,一切正常

祝你好运!

答案 38 :(得分:0)

LC_TYPE 环境设置为默认语言环境语言“ C” 将有助于消除此警告。

运行export LC_CTYPE="C"并尝试运行perl命令。

PS:您需要在 / etc / environment / etc / default / locale < / strong>寻求永久解决方案。

答案 39 :(得分:0)

每当我在最新的Kali Linux版本上运行Perl脚本(例如enum4linux)时,都会遇到此问题。

kali@kali:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    Kali
Description:    Kali GNU/Linux Rolling
Release:    2020.3
Codename:    kali-rolling
kali@kali:~$

例如

kali@kali:~$ enum4linux
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_ADDRESS = "ms_MY.UTF-8",
    LC_NAME = "ms_MY.UTF-8",
    LC_MONETARY = "ms_MY.UTF-8",
    LC_PAPER = "ms_MY.UTF-8",
    LC_IDENTIFICATION = "ms_MY.UTF-8",
    LC_TELEPHONE = "ms_MY.UTF-8",
    LC_MEASUREMENT = "ms_MY.UTF-8",
    LC_TIME = "ms_MY.UTF-8",
    LC_NUMERIC = "ms_MY.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").
enum4linux v0.8.9 (http://labs.portcullis.co.uk/application/enum4linux/)
Copyright (C) 2011 Mark Lowe (mrl@portcullis-security.com)

查看给出的警告消息。

perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

还要注意,LC_ALL = (unset)

解决方案很简单。您要做的就是设置它。

export LC_ALL=en_US.UTF-8

例如

kali@kali:~$ export LC_ALL=en_US.UTF-8
kali@kali:~$

问题解决了

kali@kali:~$ enum4linux
enum4linux v0.8.9 (http://labs.portcullis.co.uk/application/enum4linux/)
Copyright (C) 2011 Mark Lowe (mrl@portcullis-security.com)

对于永久解决方案,您可能需要将其添加到.bashrc文件中。

答案 40 :(得分:-3)

尝试重新安装:

localess apt-get install --reinstall locales

How to change the default locale

中了解详情