9

我想使用内置函数(如 upper() 和 capitalize())转换 UTF-8 字符串。

例如:

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

我怎样才能解决这个问题?

4

2 回答 2

14

不要对编码的字符串执行操作;解码到unicode第一个。

>>> mystring = "işğüı"
>>> print mystring.decode('utf-8').upper()
IŞĞÜI
于 2010-02-23T01:00:23.713 回答
9

作为一般策略,最好将文本保存在内存中后始终保持为 Unicode:如果在输入时有特定的编码要求,则在输入时对其进行解码,并在需要输出时对其进行精确编码和/或输入时间。

即使您不选择采用这种通用策略(您应该这样做!),执行所需任务的唯一合理方法仍然是再次解码、处理、编码——永远不要使用编码形式。IE:

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

假设您在分配和输出时受限于编码字符串。(不幸的是,输出约束是现实的,分配约束不是 - 只是 do mystring = u"işğüı",从一开始就使其成为 unicode ,并至少为自己节省.decode调用!-)

于 2010-02-23T01:05:43.640 回答