Hoo*_*pes 6 python encoding locale utf-8 setlocale
这似乎是一个奇怪的问题,它引起了我的一些胃灼热,因为我正在使用一个存储当前语言环境的库,并尝试将其设置回它所存储的内容。
$ docker run --rm -it python:3.6 bash
root@bcee8785c2e1:/# locale
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
root@bcee8785c2e1:/# locale -a
C
C.UTF-8
POSIX
Run Code Online (Sandbox Code Playgroud)
root@bcee8785c2e1:/# python
Python 3.6.9 (default, Jul 13 2019, 14:51:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> curr = locale.getlocale()
>>> curr
('en_US', 'UTF-8')
>>> locale.setlocale(locale.LC_ALL, curr)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/locale.py", line 598, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>>
Run Code Online (Sandbox Code Playgroud)
我不确定为什么getlocale要回来en_US?它不在我的环境变量中的任何地方(并且我不确定它可能在我的 shell 中的其他位置?)。
无论如何,我不能setlocale使用 from 的值getlocale,这对我来说似乎很奇怪。
这里有人有任何指导吗?
非常感激!
第一部分:这重要吗?据我所知,在你打电话之前我从来没有看到差异setlocale(),所以我们进入第二部分:
你应该使用:
import locale
curr = locale.getdefaultlocale()
locale.setlocale(locale.LC_ALL, curr)
Run Code Online (Sandbox Code Playgroud)
所以getdefaultlocale()而且不仅仅是getlocale()。我也不完全理解两者兼备的原因。有没有可能是Python的一个bug,无法识别C.xxx.