Python UnicodeEncodeError和Email

时间:2013-06-16 06:05:57

标签: python

我在我头上。有人可以为我愚蠢吗?

我将我的代码从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个小时,可以伸出援助之手。感谢。

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')