为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2021-03-10 13:10:10
我在Mac OS X 10.6上的python 2.7上运行,文件在utf8中,终端在utf8中。我想在给定字符串中存在的每个元音å,ä或ö之后添加一个句点。这是我要做的事的简明版本:# coding: utf8a = '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: utf8for letter in 'åäö':    print letter输出:??????但是在之前显式添加u会得到# coding: utf8for letter in u'åäö':    print letter输出:åäö明确地解码和编码回字符串utf8仍然会产生问号。这里有什么问题?在此循环中发生了什么?旁注:在愚蠢的示例中,您看到我正在尝试做的事情。实际上,我使用的是一个保存字符串的对象,以便映射操作发生在同一字符串上。因此,该map()调用实际上每次都用一个新的元音调用该对象的方法,从而更新了保存在该对象中的字符串。对象的方法使用的第二个参数的元音执行替换,map并更新存储的字符串。
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

您正在遍历字节字符串中的字节。由于编码为UTF-8的非ASCII字符使用多个字节,因此您要破坏这些字符。如果必须遍历字符,则遍历的字符unicode


查看完整回答
反对 回复 2021-03-29
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号