Форум сайта python.su
0
Всем привет!
Столкнулся со столь распространенной проблемой кодировок. Сразу отмечу, что использую Mac.
При использовании следующего кода на прием почты с mail.ru кирилица выводится вот в таком виде:
либо:
=?utf-8?Q?"=D0=97=D0=BD=D0=B0=D0=BA=D0=BE=D0=BC=D1=81=D1=82=D0=B2=D0=B0
либо:
=?utf-8?b?0JLRiyDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0LvQuNGB0Ywg0L0=?=
import poplib, email
SERVER = "pop.mail.ru "
user = "user"
USERPASSWORD = "pass"
p = poplib.POP3('pop.mail.ru')
print p.getwelcome()
print p.user(user)
print p.pass_(USERPASSWORD)
response, lst, octets = p.list()
print response
for msgnum, msgsize in [i.split() for i in lst]:
print "Number: %(msgnum)s Size: %(msgsize)s" % vars()
print "UIDL =", p.uidl(int(msgnum)).split()[2]
if int(msgsize) > 32000:
(resp, lines, octets) = p.top(msgnum, 0)
else:
(resp, lines, octets) = p.retr(msgnum)
msgtxt = "\n".join(lines)
msg = email.message_from_string(msgtxt)
print "* From: %(from)s\n* For: %(to)s\n* Text: %(subject)s\n" % msg
Офлайн
36
notfedorСкорее всего, Вы просто не пробовали
Ни один из найденых на форуме путей решения проблемы не помогает
from email.Header import decode_header
def _decode_header(msg):
header = {"from": None, "to": None, "subject": None}
for h in header:
txt, enc = decode_header(msg[h])[0]
header[h] = txt.decode(enc) if enc else txt
return header
...
msg = email.message_from_string(msgtxt)
# print "* From: %(from)s\n* For: %(to)s\n* Text: %(subject)s\n" % msg
print "* From: %(from)s\n* For: %(to)s\n* Text: %(subject)s\n" % _decode_header(msg)
Офлайн
0
Спасибо Вам огромное!
Все работает, правда не совсем понятно как работает функция(вплане что именно она делает)
в частности:
1)if enc else txt #что происходит.))
2)зачем _ перед именем функции?
Спасибо.
Офлайн
36
notfedorэто более короткая форма записи чем
1)if enc else txt #что происходит.))
if enc:
header[h] = txt.decode(enc)
else:
header[h] = txt
notfedorЧтобы не вводить Python в заблуждение :) Имя decode_header уже используется поэтому и подчеркивание перед именем функции
зачем _ перед именем функции?
Офлайн