Найти - Пользователи
Полная версия: Чтение по POP3 - koi8-r проблемка
Начало » Network » Чтение по POP3 - koi8-r проблемка
1 2
Женька
Всем доброго времени суток!
У меня возникла проблема с сохранением данных, полученных по POP3. Проблема естественно с кодировкой) Данные с POP3 я получаю в кодировке koi8-r, но в файл сохраняются они очевидно в cp1251, из-за чего содержимое оного становится нечитаемым. Причем замена в свойствах проекта cp1251 -> koi8-r ничего не меняет. Как решить проблему - никак не могу придумать. Прошу совета.
Код:

f = file(“test.txt”,“w”)

result = sock.recv(1024)
f.write(result)
pasaranax
посмотри соседнюю тему про кодировки
Женька
В соседней теме (надеюсь не промахнулся), советуется указать кодировку проекта=utf-8, после чего полученную строку (recv'ом) декодировать (в Unicode), а после энкодировать в koi8-r. Вроде все хорошо, но после указания:

# -*- coding: utf-8 -*-

в начале файла, получаю ошибку при декодировании:

UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xe1 in position 6: ordinal not in range(128)

насколько я понимаю, вся проблема в содержащихся в строке русских буквах.
bw
А что написано в заголовке Content-Transfer-Encoding?
Попробуй воспользоваться стандартным пакетом email, для парсинга сообщения. Я такой фигней не страдал, так что нет полной уверенности в том, что необходимый функционал присутствует в полном объеме.

..bw
Женька
Все, решил проблему.
Решение представляется в виде алгоритма: снести Python 2.5 -> поставить Python 3.1.1 -> запустить в нем ранее созданную программу -> “Вау, оно работает!!!!!”
regall
Женька
Все, решил проблему.
Трудно назвать такой способ решением, разве что вам побоку какая версия Питона, тогда да…
Женька
Действительно, говно, а не решение!
Предложишь лучше?
s_king
Доброго времени суток.
Решил освоить Python, ну шоб с пользой для дела - под конкретную задачу. Для нее как нельзя лучше подходит пример, который есть в половине интернета, немного переделав под себя получил следующий код

# -*- coding: UTF-8 -*-
import poplib, email, quopri
server='pop3.mail.ru'
user='xxxx@mail.ru'
passwd='xxxxx'
pop=poplib.POP3(server)
print pop.user(user)
print pop.pass_(passwd)
response, lst, octets = pop.list()
print response
for msgnum, msgsize in :
print “Сообщение %(msgnum)s имеет длину %(msgsize)s” % vars()
print “UIDL =”, pop.uidl(int(msgnum)).split()
(resp, lines, octets) = pop.retr(msgnum)
msgtxt = “\n”.join(lines)+“\n\n”
msg=email.message_from_string(msgtxt)
print “* От: %(from)s\n* Кому: %(to)s\n* Тема: %(subject)s\n” % msg
print pop.quit()

получаю следующий результат


Сообщение 53 имеет длину 1744
UIDL = 1322122204905
* От: =?KOI8-R?Q?=F5=C4=CF=D7=C5=CE=CB=CF_=F3=C5=D2=C7=C5=CA?=
<xxx@bk.ru>
* Кому: xxx@mail.ru
* Тема: Fwd: =?KOI8-R?Q?=F4=C5=CB=D5=DD=C9=C5_=CB=D5=D2=D3=D9_=D7=C1?=
=?KOI8-R?Q?=CC=C0=D4_=CB_=D2=D5=C2=CC=C0_=D7_=D3=C9=D3=D4=C5=CD=C5?=
=?KOI8-R?Q?_=3F=F4=C5=CC=C5=C2=C1=CE=CB=3F?=

Сообщение 54 имеет длину 1828
UIDL = 1322201447320
* От: =?utf-8?B?0KHQuNGB0YLQtdC80LAg0YPQstC10LTQvtC80LvQtdC90LjQuSDQktCi0JEgMjQgKNCX0JDQnik=?= <notify@vtb24.ru>
* Кому: xxx@bk.ru
* Тема: =?utf-8?B?0JrRg9GA0YHRiyDQsdC10LfQvdCw0LvQuNGH0L3QvtC5INC60L7QvdCy0LXRgNGB0LjQuCDQstCw0LvRjtGC0LAt0LLQsNC70Y7RgtCwINCyINGB0LjRgdGC0LXQvNC1IMKr0KLQtdC70LXQsdCw0L3QusK7?=

я уже по всякому пробовал но ничего сделать не могу как мне раскодировать все эти строки? причем видно же что письма приходят в разных кодировках, а почему выводятся неправильно не пойму.
py.user.next
используй email.header.decode_header()
s_king
py.user.next
используй email.header.decode_header()
Чет как-то слишком неудобно получается. Весь массив msg брать не хочет только по одной строчке, возвращает список с аброказяброй и названием кодировки, отдельно вытянуть аброказябру не получается, печатает все вместе с названием кодировки:

…..
…str=email.header.decode_header(msg)
…print str

('sdfsdfsdfsdf', ‘utf-8’)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB