`str.upper()`方法不考虑'LC_CTYPE'设置,但'pyicu'考虑

2024-09-28 21:48:23 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python自己的locale模块和str.upper()方法时,'istanbul'.upper()返回不正确的结果

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'tr_TR.UTF-8')
>>> 'tr_TR.UTF-8'
>>> s1 = 'istanbul'
>>> s1.upper()
'ISTANBUL'

如果我安装并使用pyicu,它将按预期工作

>>> from icu import Locale, UnicodeString
>>> tr = Locale('tr_TR.UTF-8')
>>> s2 = UnicodeString('istanbul')
>>> str(s2.toUpper(tr))
'İSTANBUL'

如何确保Python的内置模块和方法在给定的语言环境下正常工作


Tags: 模块方法importupperlocaletrutfs2
1条回答
网友
1楼 · 发布于 2024-09-28 21:48:23

不幸的是,如果不使用软件包,就无法做到这一点。正如您所说,您可以使用pyicu,但如果您不想使用它,则可以对其进行硬编码:

import re

def tr_upper(word):
    word = re.sub(r"i", "İ", word)
    word = re.sub(r"ı", "I", word)
    word = re.sub(r"ç", "Ç", word)
    word = re.sub(r"ş", "Ş", word)
    word = re.sub(r"ü", "Ü", word)
    word = re.sub(r"ğ", "Ğ", word)
    word = word.upper() # for the rest use default upper
    return word

print( tr_upper("istanbul") ) #İSTANBUL

相关问题 更多 >