0

我有点过头了。有人可以帮我把这个哑巴吗??

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

4

2 回答 2

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
于 2013-06-16T06:13:05.603 回答
0

你有没有尝试过

msg_string = data['RFC822'].encode('ascii','ignore')
于 2014-07-14T23:14:35.857 回答