使用Unicode字符遍历字符串时,字符串字符被误解

我在Mac OS X 10.6上的python 2.7上运行,文件在utf8中,终端在utf8中。


我想在给定字符串中存在的每个元音å,ä或ö之后添加一个句点。


这是我要做的事的简明版本:


# coding: utf8


a = 'change these letters äöå'


b = map( (lambda x: a.replace(x, "{0}.".format(x))), 'åäö')


for c in b:

    print c

产生以下输出:


change these letters ?.??.??.?

change these letters äöå.

change these letters ?.??.??.?

change these letters ä.öå

change these letters ?.??.??.?

change these letters äö.å

为什么我得到带有问号的行?经过进一步研究,这样做会产生相同的问号。


# coding: utf8


for letter in 'åäö':

    print letter

输出:


?

?

?

?

?

?

但是在之前显式添加u会得到


# coding: utf8

for letter in u'åäö':

    print letter

输出:


å

ä

ö

明确地解码和编码回字符串utf8仍然会产生问号。这里有什么问题?在此循环中发生了什么?


旁注:在愚蠢的示例中,您看到我正在尝试做的事情。实际上,我使用的是一个保存字符串的对象,以便映射操作发生在同一字符串上。因此,该map()调用实际上每次都用一个新的元音调用该对象的方法,从而更新了保存在该对象中的字符串。对象的方法使用的第二个参数的元音执行替换,map并更新存储的字符串。


临摹微笑
浏览 186回答 2
2回答

精慕HU

您正在遍历字节字符串中的字节。由于编码为UTF-8的非ASCII字符使用多个字节,因此您要破坏这些字符。如果必须遍历字符,则遍历的字符unicode。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python