更改包含重音和本地字母的unicode字符串中的字母大小写

时间:2014-03-05 13:12:43

标签: python string unicode case-sensitive

Python字符串和unicode对象具有以下用于字符串大小写转换的方法。

  • upper()
  • lower()
  • title()

使用unicode字符串,我几乎可以处理本地字母表中的所有字符:

test_str = u"ças şak ürt örkl"
print test_str.upper()
>> ÇAS ŞAK ÜRT ÖRKL

除了两个字母。由于我住在土耳其,我有典型的Turkish I problem

在我的本地字母表中,我们有一封与İ相似的字母I,其案例转换必须如下所示

I → lowercase → ı

i → uppercase → İ

是的,它会破坏i --> I的ASCII转换,因为iI是两个单独的字母。

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 个答案:

答案 0 :(得分:4)

Python目前不支持特定于语言环境的案例折叠,也不支持Unicode SpecialCasing.txt中的其他规则。如果您今天需要,可以从PyICU获取它们。

>>> unicode( icu.UnicodeString(u'IK').toLower(icu.Locale('TR')) )
u'ık'

虽然如果你关心的只是土耳其语I,你可能更喜欢特殊情况。