UTF-8与upper()
我想用一些内置的函数,比如 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