Python字符串.letters不包括本地化的变音符号。

5

我正在尝试使用Python字符串模块根据指定的语言环境获取字母表,但没有成功(也就是带有变音符号的字母,例如法语中的éèêà...)。这是一个最简单的示例:

import locale, string

locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
print string.letters
# shows ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
print string.letters
# also shows ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

在Python文档中,它说到string.letters是与语言环境相关的,但似乎对我并不起作用。
我做错了什么?获取具有语言环境依赖性的字母表的方法正确吗?
编辑:在设置后,我刚刚检查了语言环境print locale.getlocale(),它已经正确更改了。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - furas
可能是因为您的区域设置没有更新,请在 setlocale 后检查 locale.getlocale(locale.LC_ALL) - Sardorbek Imomaliev
如果你省略了“.UTF-8”这部分,你会得到更多的字母,但我无法确定使用的编码方式是什么。 - Bart Friederichs
不写“.UTF-8”不会改变任何东西。 - F. Boudin
1个回答

3
在Python 2.7中(在Python 3.x中没有string.letters),如果您将语言环境设置为“fr_FR”(相当于“fr_FR.ISO8859-1”,而不是“fr_FR.UTF-8”),它就可以正常工作。
>>> import locale, string
>>> locale.setlocale(locale.LC_ALL, 'es_ES')
'es_ES'
>>> string.letters
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb5\xba\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
>>> locale.setlocale(locale.LC_ALL, 'es_ES.UTF-8')
'es_ES.UTF-8'
>>> string.letters
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

所以,\xaa 是字符“ª”,\xab 是“«”,\xd1 是“Ñ”等等。但编码表示确实是有问题的。
我强烈建议阅读这篇文章:https://pythonhosted.org/kitchen/unicode-frustrations.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接