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

6 投票
1 回答
866 浏览
提问于 2025-04-17 20:56

在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的转换,因为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 个回答

5

目前,Python并不支持根据地区的不同来处理字母大小写,也没有遵循Unicode中的特殊大小写规则。如果你现在需要这些功能,可以从PyICU这个库里找到。

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

不过,如果你只关心土耳其语中的字母I,你可能只需要特别处理这个字母就可以了。

撰写回答