我在我头上。有人可以为我愚蠢吗?
我将我的代码从Python 2.6移植到2.7然后突然因为unicode问题而无法检索我的电子邮件有效负载(它实际上只是使用不同的Py版本来拉动相同的电子邮件。我读了Unicode HOWTO并迷路了。
以下在Python 2.6上运行时有效:
response = server.fetch(messages, ['RFC822'])
for msgid, data in response.iteritems():
msg_string = data['RFC822']
msg = email.message_from_string(msg_string)
body = msg.get_payload()
abody = str(body[1]) #converts the HTML instance to a string
但是当我在2.7下运行时,我得到以下错误:
File "./foo.py", line 75, in main
msg = email.message_from_string(msg_string)
File "/usr/lib/python2.7/email/__init__.py", line 57, in message_from_string
return Parser(*args, **kws).parsestr(s)
File "/usr/lib/python2.7/email/parser.py", line 82, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 3041: ordinal not in range(128)
很明显,2.7翻译并不喜欢我正在阅读的电子邮件的某些部分。我怀疑我需要转换类型(或某种方式与输出类型混淆),但我'我迷失了真正的问题和解决方案。
我需要2个小时,可以伸出援助之手。感谢。
答案 0 :(得分:0)
一个疯狂的猜测:你的msg_string是用UTF-8编码的。它还可以进一步编码为“引用的可打印”。
我会尝试做这样的事情:
#...
msg_string = data['RFC822'].decode('utf8')
#... etc
如果这有帮助,但你仍然看到奇怪的字符(= C3 = 96 ......),请尝试以下方法:
import quopri
#...
msg_string = data['RFC822'].decode('quopri').decode('utf8')
#... etc
答案 1 :(得分:0)
你试过吗
msg_string = data['RFC822'].encode('ascii','ignore')