首页 文章

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

提问于
浏览
493

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

我如何解决它?

30 回答

  • 24

    您需要在 /etc/default/localelogout, 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
    
  • 3

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

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

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

  • 124

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

    $ sudo locale-gen
    

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

  • 123

    按照接受的答案:

    LANG = C ssh hunter2 .

    LC_ALL = C ssh hunter2

    在客户端为我做了伎俩 .

  • 6

    我现在正在使用这个:

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

    然后注销SSH会话并再次登录 .

    Old answer:

    只有这帮助了我:

    $ 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
    
  • 11

    对我来说,我修复了这个错误编辑.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
    

    亲切的,

  • 176

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

    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

    我知道这个线程很老但也许有人会觉得这很有用 . 我知道这有多烦人 .

  • 2

    它在Ubuntu中很简单 . 您必须从头开始生成Locales,从命令行运行以下命令:

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

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

  • 1

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

    Mac OS X v10.7.5(狮子),修复了一些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
    
  • 20

    在经过多次搜索之后,在Debian上做到了这一点 .

    第一:

    sudo apt-get purge locales
    

    然后:

    sudo aptitude install locales
    

    和着名的:

    sudo dpkg-reconfigure locales
    

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

  • 9

    使用:

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

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

  • 4

    就我而言,这是输出:

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

    解决方案是:

    sudo locale-gen ro_RO.UTF-8
    
  • 80

    仅适用于macOS和Mac OS X用户

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

    要解决此警告 Uncheck Set locale environment variable on startup 选项并重新启动终端 . 屏幕截图下方代表我的终端设置 .

    enter image description here

  • 21

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

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

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

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

    $ sudo locale-gen
    $ sudo dpkg-reconfigure locales
    

    另见man locale-gen .

  • 10

    对我来说,在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
    

    然后重启......

  • 1

    使用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,为我工作:)

  • 34

    ssh 默认覆盖LC语言环境变量 . 见 /etc/ssh/sshd_config

    AcceptEnv LANG LC_*
    

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

  • 11

    将缺少的区域设置添加到.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
    
  • 4

    如果您不关心区域设置问题,you can set PERL_BADLANG=0 . 当然,这可能导致不正确的本地化 .

  • 2

    您的操作系统不了解 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 环境变量 .

    • 在客户端修改您的环境,例如,而不是 ssh hunter2 ,使用命令 LANG=C ssh hunter2 .

    • 如果您具有管理员权限,请通过在本地 /etc/ssh/ssh_config 文件中注释掉 SendEnv LANG LC_* 行来停止ssh发送环境变量 . (感谢this answer . 见Bug 1285 for OpenSSH了解更多 . )

  • 1

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

    /etc/ssh/ssh_config 代表 #AcceptEnv LANG LC_*

    sshd_config for #SendEnv LANG LC_*

    然后重启ssh服务 .

    最后,做了

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

  • 1
    sudo nano /etc/locale.gen
    

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

    然后运行:

    sudo /usr/sbin/locale-gen
    

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

  • 1
    perl: warning: Falling back to the standard locale ("C").
    locale: Cannot set LC_ALL to default locale: No such file or directory
    

    Solution:

    试试这个( uk_UA.UTF-8 是我当前的语言环境 . 编写你的语言环境,例如 en_US.UTF-8 !)

    sudo locale-gen uk_UA.UTF-8
    

    还有这个 .

    sudo dpkg-reconfigure locales
    
  • 1

    将正确的区域设置添加到 ~/.bashrc~/.bash_profile/etc/environment 等将解决问题,但不建议这样做,因为它会覆盖 /etc/default/locale 中的设置,这最多会让人感到困惑,并且可能导致区域设置在最坏情况下不能始终如一地应用 .

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

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

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

  • 1

    对于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
    

    为我工作 .

  • 378

    在使用英国键盘/语言环境的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 并启用了它来解决这个问题
      en_US.utf8 预期找到并运行 local-gen 的语言环境 .

    (我使用pac-manager,它使用AUR中的一大堆 perl 模块,因此在我的特定情况下重新安装 perl 会令人讨厌)

  • 418

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

相关问题