Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置Python';Windows上的区域设置是什么?_Python_Windows_Localization_Internationalization - Fatal编程技术网

设置Python';Windows上的区域设置是什么?

设置Python';Windows上的区域设置是什么?,python,windows,localization,internationalization,Python,Windows,Localization,Internationalization,我正在尝试以区域设置感知的方式对字符串列表进行排序。我已经将Babel库用于其他与i18n相关的任务,但它不支持排序。Python的locale模块提供了一个strcoll函数,但要求将进程的locale设置为我想要使用的。有点痛,但我能忍受 问题是我似乎无法实际设置区域设置。locale模块的示例如下: import locale locale.setlocale(locale.LC_ALL, 'de_DE') 当我运行它时,我得到以下信息: Traceback (most recent c

我正在尝试以区域设置感知的方式对字符串列表进行排序。我已经将Babel库用于其他与i18n相关的任务,但它不支持排序。Python的
locale
模块提供了一个
strcoll
函数,但要求将进程的locale设置为我想要使用的。有点痛,但我能忍受

问题是我似乎无法实际设置区域设置。
locale
模块的示例如下:

import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
当我运行它时,我得到以下信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\Lib\locale.py", line 494, in setlocale
locale.Error: unsupported locale setting
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
setlocale中第494行的文件“C:\Python26\Lib\locale.py”
区域设置。错误:不支持的区域设置

我做错了什么?

看来你在使用Windows。那里的区域设置字符串不同。更准确地查看文档:

locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform
在Windows上,我认为应该是这样的:

locale.setlocale(locale.LC_ALL, 'deu_deu')

MSDN有一个和的列表,您不应该将显式区域设置传递给setlocale,这是错误的。让它从环境中找到答案。您必须传递一个空字符串

import locale
locale.setlocale(locale.LC_ALL, '')

从locale.setlocale文档:

locale.setlocale(category, locale=None):
    """
    Set the locale for the given category.  The locale can be
    a string, an iterable of two strings (language code and encoding),
    or None.
    """"
在Linux(特别是Ubuntu)下,您可以使用

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

如果系统上未安装区域设置,则会出现相同的错误。因此,请确保在系统上安装了区域设置

$ locale -a # to list the currently installed locales
$ (sudo) locale-gen de_DE.UTF-8 # to install new locale
Ubuntu 在Ubuntu上,你可能会遇到这个问题,因为你的系统上没有安装本地的

从shell中尝试以下操作:

$> locale -a
并检查是否找到您感兴趣的区域设置。否则,您必须安装它:

$> sudo apt-get install language-pack-XXX
其中XXX是您的语言(在我的例子中是“XXX=it”,意大利语地区) 然后运行
dpkg重新配置

$> sudo dpkg-reconfigure locales
然后在python shell中重试:

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

(这是针对意大利地区,这正是我所需要的)

这是唯一正确的使用方法,为德国地区提供了一个示例:

import locale

locale.setlocale(category=locale.LC_ALL,
                 locale="German")  # Note: do not use "de_DE" as it doesn't work

我知道多年前就有人问过这个问题,但我想我应该尝试添加我发现的内容,在Windows上使用Python 3.6:

import locale
for x in locale.windows_locale.values():
    print(x.replace('_','-'))
我尝试了一些,这似乎也是一种了解Windows上有哪些可用功能的方法

很高兴知道:由于某些原因,在当前稳定的Python版本中,这与strptime()不兼容

然后您只需设置区域设置:


locale.setlocale(locale.LC\u ALL,打印字符串的任何项)

我在问题中没有提到这一点,因为它没有直接关系,但我当时编写的代码是为在web服务器上使用而设计的。换句话说,语言环境可能会随着每个请求而变化,并且不一定与环境的语言环境相同。DNS:您阅读了语言环境的文档了吗?这意味着调用setlocale“很多”可能是危险的,而且它不是线程安全的。因此,也许除了setlocale之外,还有其他解决方案。例如,Gettext可以加载不同的目录并在运行时切换;但是我不知道您使用区域设置的目的是什么。除非您的用户不在本地机器上,否则我在尝试将区域设置设置为
fr\fr
时,在
ubuntu13.04
Linux 3.8.0-19
和python
2.7.4
下遇到了问题。将其设置为
fr\u fr.UTF-8
对我来说很有效。对于Conda 4.4.11和Windows 7中的Python 3.6.3,区域设置字符串似乎与其他操作系统相同。此列表更全面:链接的文档对于WSServer2018R2来说似乎太新了,我不得不使用
'eng\u usa'
'en\u US'
不起作用)这个问题专门问有关Windows的问题。这是唯一真正回答这个问题的答案。这对我有所帮助,但我不得不将
德语改为
葡萄牙语。\u巴西。1252
。您知道列出这些值的文档吗?
import locale
for x in locale.windows_locale.values():
    print(x.replace('_','-'))