Python的区域设置错误:不支持的区域设置(Python locale error: unsupp

2019-07-18 18:52发布

为什么在Python这样做时,我得到了以下错误:

>>> import locale
>>> print str( locale.getlocale() )
(None, None)
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 531, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

这适用于其他区域设置像FR或NL为好。 我使用Ubuntu 11.04。

更新:执行以下操作,没有产生任何东西:

dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

Answer 1:

运行以下命令

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

这将解决这个问题。

确保比赛.UTF-8部分,在输出中发现的实际语法locale -a.utf8在某些系统上。



Answer 2:

你可能没有任何de_DE区域可用。

您可以查看可用区域设置列表与locale -a命令。 例如,我的机器上:

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
it_CH.utf8
it_IT.utf8
POSIX

需要注意的是,如果你想设置的语言环境it_IT你还必须指定.utf8

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'it_IT')   # error!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 539, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'

要安装新的语言环境使用:

sudo apt-get install language-pack-id

其中, id为语言代码(摘自这里 )

已安装的语言环境后,您应该遵循朱利安Palard建议和重新配置的语言环境:

sudo dpkg-reconfigure locales


Answer 3:

根据这个链接 ,它是通过输入以下命令来解决:

出口LC_ALL = C



Answer 4:

一个以上的答案提供了解决方案:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

与上述解决方案的问题是,它必须在Linux shell完成。 但是,如果你提供你的代码在客户机上工作,那么这是一个不错的办法。 我也尝试使用使用os.system()执行上面的命令,但它仍然无法正常工作。

为我工作的解决方案是

locale.setlocale(locale.LC_ALL,'en_US.UTF-8')


Answer 5:

更永久的解决方案将是,以填补缺失的值,在通过命令所示的输出: locale

从输出locale是:

 $ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

以填补缺失值编辑〜/ .bashrc中:

 $ vim ~/.bashrc

添加以下行上述命令后(假设你想的en_US.UTF-8是你的语言):

export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

如果该文件是只读的,你会需要遵循由提到的步骤的GeekyBoy 。 通过给出的答案在超级用户贝乔博士拥有与保存只读文件的详细信息。

保存文件之后做:

$ source ~/.bashrc

现在你不会再被面临同样的问题。



Answer 6:

如果你在一个Debian(或Debian的叉子),您可以添加使用的语言环境:

dpkg-reconfigure locales


Answer 7:

在Arch Linux的我可以通过运行来解决这个sudo locale-gen



Answer 8:

根据记录,我有这个同样的问题,但没有解决方案的工作。 我已经升级我的电脑,我的迁移PC。 我有AA混合语言环境英语和西班牙语:

$ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

但是,在我的新Debian安装,我只是选择了英语作为语言环境。 这最后的工作是重新配置区域设置包的添加和产生的西班牙了。

$ grep -v "#" /etc/locale.gen 
en_US.UTF-8 UTF-8
es_ES.UTF-8 UTF-8


Answer 9:

  • 运行此命令locale来获得使用什么语言环境。 如:

LANG =的en_US.UTF-8
LANGUAGE = EN_US:恩
LC_CTYPE = zh_CN.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 =

  • 搜索在第一步中所列出的语言环境列表中/etc/locale-gen文件。 取消注释,使用的人
  • 运行locale-gen生成新添加的语言环境


Answer 10:

在我看来,设置最简单的方法在python当地的语言环境{3}是:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'de_DE.UTF-8'

随后,现场了解的东西只是工作,如果你在一个体面的Linux发行版,并且应该对其他操作系统的二进制分发工作,以及(或者说是一个错误恕我直言)

>>> import datetime as dt
>>> print(dt.date.today().strftime("%A %d. %B %Y"))
Sonntag 11. Dezember 2016


Answer 11:

如果我是你,我会用BABEL: http://babel.pocoo.org/en/latest/index.html

我来到这里使用泊坞窗同样的问题,我已经试过每一个步骤,并没有很好地工作,总是让现场的错误,所以我决定用BABEL,一切运作良好。



Answer 12:

将其放置在Dockerfile上述ENV

# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

ENV LANG en_US.UTF-8


Answer 13:

出现此错误,如果你刚刚增加了一个新的语言环境。 您需要重新启动Python交互式shell( quit( )和python )来访问它。



Answer 14:

在试图让蟒蛇吐出在特定的地区名登陆我这里有同样的问题。

在追求答案,事情变得有点神秘,我觉得。

我发现Python代码。

import locale
print locale.getdefaultlocale()
>> ('en_DK', 'UTF-8')

事实上locale.setlocale(locale.LC_TIME, 'en_DK.UTF-8')作品

这里使用的提示我进一步测试,看看有什么可以使用Python代码

import locale
loc_list = [(a,b) for a,b in locale.locale_alias.items() ]
loc_size = len(loc_list)
print loc_size,'entries'

for loc in loc_list:
    try:
        locale.setlocale(locale.LC_TIME, loc[1])
        print 'SUCCES set {:12} ({})'.format(loc[1],loc[0])
    except:
        pass

其中收益率

858 entries
SUCCES set en_US.UTF-8  (univ)
SUCCES set C            (c.ascii)
SUCCES set C            (c.en)
SUCCES set C            (posix-utf2)
SUCCES set C            (c)
SUCCES set C            (c_c)
SUCCES set C            (c_c.c)
SUCCES set en_IE.UTF-8  (en_ie.utf8@euro)
SUCCES set en_US.UTF-8  (universal.utf8@ucs4)
SUCCES set C            (posix)
SUCCES set C            (english_united-states.437)
SUCCES set en_US.UTF-8  (universal)

其中仅上述工作! 但en_DK.UTF-8是不是在这个列表中,但它的作品!?!? 什么?? 而蟒蛇生成的区域列表确实包含了很多DA和DK的连击,我正在寻找,但没有再次UTF-8 DA / DK ...

我是在一个点的Linux发行版(基于Debian),这里locale说除其他LC_TIME="en_DK.UTF-8" ,这是我知道的作品,而不是语言环境,我需要。

locale -a

C
C.UTF-8
en_DK.utf8
en_US.utf8
POSIX

所以,一定要安装其他语言环境 ,我做到了通过编辑/etc/locale.gen ,取消需要行da_DK.UTF-8 UTF-8和运行命令locale-gen

现在locale.setlocale(locale.LC_TIME, 'da_DK.UTF-8')工作过,我可以让我的本地化的日期和月份的名字。

我Conclision:

的Python:locale.locale_alias是不是在所有有帮助寻找可用的语言环境!

Linux系统:这是很容易得到的语言环境列表,并安装新的语言环境。 有很多可用的帮助。

Windows:我一直在调查了一下,但没有定论。 还有,虽然职位导致的答案,但我没有感觉到追求它的冲动。



Answer 15:

如果我理解正确的,错误的主要来源是这里的区域名称的确切的语法。 特别是因为它似乎分布之间的不同。 我已经看到了不同的答案/评论这里提到:

de_DE.utf8
de_DE.UTF-8

尽管这显然是一个人一样,同样不抱你的标准确定的算法。

所以,你可能会做的线沿线的东西:

DESIRED_LOCALE=de
DESIRED_LOCALE_COUNTRY=DE
DESIRED_CODEPAGE_RE=\.[Uu][Tt][Ff].?8
if [ $(locale -a | grep -cE "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}") -eq 1 ]
then
    export LC_ALL=$(locale -a | grep -m1 -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")
    export LANG=$LC_ALL
else
    echo "Not exactly one desired locale definition found: $(locale -a | grep -E "${DESIRED_LOCALE}_${DESIRED_LOCALE_COUNTRY}${DESIRED_CODEPAGE_RE}")" >&2
fi


Answer 16:

首先,确保你有做安装语言包:

sudo apt-get install language-pack-en-base


sudo dpkg-reconfigure locales


文章来源: Python locale error: unsupported locale setting