Python语言环境错误:不支持的语言环境设置

too*_*oom 304 python locale ubuntu-11.04

为什么在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
Run Code Online (Sandbox Code Playgroud)

这适用于其他语言环境,如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
Run Code Online (Sandbox Code Playgroud)

Muh*_*san 622

运行以下命令

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)

它会解决这个问题.

确保将匹配.UTF-8部分在输出中发现的实际语法locale -a例如,.utf8在某些系统上.

  • 我没有使用dpkg命令.毕竟,如果问题是在本地发生的,那么真正的解决方案是将前两个命令添加到启动应用程序. (8认同)
  • 这对我不起作用。导出LC_ALL =“ en_US.UTF-8”失败,并带有-bash:警告:setlocale:LC_ALL:无法更改语言环境(en_US.UTF-8)这样做的作用是:导出LC_ALL = C (2认同)

Bak*_*riu 191

您可能没有任何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
Run Code Online (Sandbox Code Playgroud)

请注意,如果要将语言环境设置为,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'
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get install language-pack-id
Run Code Online (Sandbox Code Playgroud)

id语言代码在哪里(取自这里)

之后您已经安装了区域,那么你应该遵循朱利安Palard建议和重新配置的语言环境:

sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)


Fat*_*hei 178

根据此链接,通过输入以下命令解决:

导出LC_ALL = C.

  • 这是什么意思? - 好吧,它设置一个环境变量`LC_ALL`到值'C' - 但为什么这个工作? (3认同)
  • 为什么LC_ALL有效 - > https://unix.stackexchange.com/questions/87745/what-does-lc-all-c-do (3认同)

Ayu*_*yan 44

上述答案之一提供了解决方案:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)

上述解决方案的问题是它必须在linux shell上完成.但是,如果您提供的代码在客户端计算机上工作,那么这是一种糟糕的方法.我也尝试使用os.system()执行上面的命令,但它仍然不起作用.

对我有用的解决方案是

locale.setlocale(locale.LC_ALL,'en_US.UTF-8')
Run Code Online (Sandbox Code Playgroud)


lor*_*liz 32

更永久的解决方案是在命令显示的输出中填充缺失值: 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=
Run Code Online (Sandbox Code Playgroud)

要填充缺少的值,请编辑〜/ .bashrc:

 $ vim ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

在上面的命令之后添加以下行(假设你想要en_US.UTF-8作为你的语言):

export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

如果此文件是ReadOnly,则需要按照The GeekyBoy提到的步骤进行操作.Beco博士在超级用户中给出的答案有关于保存只读文件的详细信息.

保存文件后执行:

$ source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

现在你不再面对同样的问题了.


Jul*_*ard 12

如果您使用的是Debian(或Debian fork),则可以使用以下命令添加语言环境:

dpkg-reconfigure locales
Run Code Online (Sandbox Code Playgroud)


Moh*_*med 8

您的错误清楚地表明,您正在尝试使用不存在的语言环境。

>>> 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 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
Run Code Online (Sandbox Code Playgroud)

locale.Error: 不支持的区域设置

要检查可用设置,请使用 locale -a

deb@deb-Latitude-E7470:/ambot$ 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
POSIX
Run Code Online (Sandbox Code Playgroud)

所以你可以使用其中之一,

>>> locale.setlocale(locale.LC_ALL, 'en_AG.utf8')
'en_AG.utf8'
>>> 
Run Code Online (Sandbox Code Playgroud)

为了 de_DE

可以手动调整此文件,也可以使用工具 update-locale 更新此文件。

update-locale LANG=de_DE.UTF-8
Run Code Online (Sandbox Code Playgroud)


Kei*_*ley 6

在Arch Linux上,我能够通过运行来解决这个问题 sudo locale-gen