我在 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
并更新存储的字符串。