UTF-8与upper()

9 投票
2 回答
5344 浏览
提问于 2025-04-15 19:36

我想用一些内置的函数,比如 upper() 和 capitalize(),来处理 UTF-8 字符串。

举个例子:

>>> mystring = "işğüı"
>>> print mystring.upper()
Işğüı  # should be İŞĞÜI instead.

我该怎么解决这个问题呢?

2 个回答

9

其实,作为一个通用的策略,最好是在内存中始终保持你的文本为Unicode格式:在输入的时候就解码,只有在你需要输出的时候才编码,如果在输入和输出时有特定的编码要求。

即使你不打算采用这个通用策略(其实你应该这么做!),要完成你需要的任务,唯一正确的方法还是先解码、处理,然后再编码——绝不要直接在编码后的形式上操作。也就是说:

mystring = "işğüı"
print mystring.decode('utf-8').upper().encode('utf-8')

假设你在赋值和输出时都只能使用编码后的字符串。(输出的限制是比较现实的,但赋值的限制就不太合理——你可以直接用 mystring = u"işğüı",从一开始就用Unicode,这样就能省去至少一次 .decode 的调用!)

14

不要直接对编码过的字符串进行操作;首先要把它解码成 unicode 格式。

>>> mystring = "işğüı"
>>> print mystring.decode('utf-8').upper()
IŞĞÜI

撰写回答