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 = data['RFC822'].encode('ascii','ignore')
于 2014-07-14T23:14:35.857 に答える
0

大まかな推測: msg_string は UTF-8 を使用してエンコードされています。また、「quoted printable」としてさらにエンコードすることもできます。

私はこのようなことをしようとします:

#...
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 に答える