在Windows上正确设置Python的区域设置的方法是什么?

92 投票
6 回答
132588 浏览
提问于 2025-04-15 12:03

我正在尝试以符合地区习惯的方式对一串字符串进行排序。我之前用过Babel库来处理其他国际化相关的任务,但它不支持排序。Python的locale模块提供了一个strcoll函数,但需要将进程的地区设置为我想要使用的那种。这有点麻烦,不过我可以接受。

问题是我似乎无法真正设置地区。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

我哪里做错了?

6 个回答

22

这是设置德语地区的唯一正确方法,正如提问者所询问的:

import locale

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

不过请注意,最好这样设置:

import locale

locale.setlocale(
    category=locale.LC_ALL,
    locale=""
)

我们应该给locale这个参数传一个空字符串,也就是locale="",这样系统会自动选择用户操作系统上设置的默认地区。

我强烈建议你总是使用locale="",因为这是唯一不依赖于地区的方式,可以提供绝对的灵活性。

26

不应该给setlocale函数传递一个明确的地区设置,这样做是不对的。让它自己从环境中去判断。你只需要给它传递一个空字符串就可以了。

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

看起来你是在用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有一份关于语言字符串国家/地区字符串的列表。

撰写回答