更改包含重音和本地字母的Unicode字符串中字母的大小写
在Python中,字符串和Unicode对象有一些方法可以用来改变字母的大小写。
upper()
:把字母变成大写lower()
:把字母变成小写title()
:把每个单词的首字母变成大写
使用Unicode字符串,我几乎可以处理我本地字母表中的所有字符:
test_str = u"ças şak ürt örkl"
print test_str.upper()
>> ÇAS ŞAK ÜRT ÖRKL
但有两个字母例外。因为我住在土耳其,所以我遇到了典型的土耳其字母I问题
。
在我的本地字母表中,有一个字母İ
,它和I
很像,但它们的大小写转换方式如下:
I → 小写 → ı
i → 大写 → İ
而且,这确实会影响ASCII的转换,因为i
和I
是两个不同的字母。
test_str = u"ik"
print test_str.upper()
>> IK # Wrong! must be İK
test_str = u"IK"
print test_str.lower()
>> ik # Wrong! must be ık
我该如何解决这个问题呢?有没有办法用Python内置的方法正确处理大小写转换?
1 个回答
5
目前,Python并不支持根据地区的不同来处理字母大小写,也没有遵循Unicode中的特殊大小写规则。如果你现在需要这些功能,可以从PyICU这个库里找到。
>>> unicode( icu.UnicodeString(u'IK').toLower(icu.Locale('TR')) )
u'ık'
不过,如果你只关心土耳其语中的字母I,你可能只需要特别处理这个字母就可以了。