Кодирование данных в Python - PullRequest
1 голос
/ 05 марта 2012

Я загружаю изображение из групп новостей с модулем nntplib в python. Затем я хочу сохранить данные в файл. Я использую:

news.group('alt.binaries.misc')  
data=''.join(news.body('<DhTgplpHcRsZMBTTw3i35@spot.net>')[-1])  
f=open('image.png','wb')  
f.write(data)  
f.close()

Однако сохраненный файл не является правильным файлом изображения.
data это строка вида:

'\x89PNG=B=C\x1a=C=A=A=A=BIHDR=A=A\x02X=A=A\x01Q\x08\x06=A=A=A\xa8\x81\xd3\x89=A=A=A\tpHYs=A=A\x0b\x13=A=A\x0b\x13\x01=A\x9a\x9c\x18=A=A etc... '

, с длиной 309530.
По первым байтам я могу сказать, что этот файл должен быть в формате png, а его размер мне тоже подходит, поэтому я предполагаю, что данные верны.
Кто-нибудь знает, что я делаю не так?

UPDATE:
Я заглянул в заголовок статьи и там написано: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Не думаю, что это очень полезно при расшифровке текста, но кто знает ..

Я также сравнил свою строку с обычными заголовками файлов png. Это \x89PNG\r\n\x1a\n или \x89PNG\x0d\x0a\x1a\x0a. (как сказала и Алексис)
Я пришел к выводу, что = B означает \ x0d, = C для \ x0a и = A для \ x00. Я предполагаю, что другие \ x .. не закодированы, но я не уверен (я не очень разбираюсь в кодировках) update3 показывает, что они различаются.
Что такое кодировка, которая кодирует этот путь?

UPDATE2: данные: - см. ниже - (repr(data))

Update3: Я смог сохранить изображение с другой программой, а затем открыть его в Python. Это то, что данные должны быть. - см. Ниже - . Начало выглядит примерно одинаково, но после этого есть большая разница. Какого черта эта кодировка? это действительно расстраивает меня. (Кстати, спасибо за всю большую помощь до сих пор)


Все файлы: http://dl.dropbox.com/u/1499291/python-encoding-question/index.html

Ответы [ 3 ]

1 голос
/ 27 марта 2012

NULL заменяется на «= A», CR на «= B», LF на «= C» и «=» на «= D», очень похоже на gZip 8bit ([http://www.imc.org/ietf-usefor/2003/Feb/0575.html][1]).

1 голос
/ 05 марта 2012

выглядит так, как будто данные закодированы, поэтому вы должны декодировать их, прежде чем записать их в файл изображения.

вы можете проверить это, когда вы uudecode image.png файл, который вы написали с помощью вышеуказанного сценария.

Python поддерживает это в модуле uu .

0 голосов
/ 05 марта 2012

Я не верю, что NNTP.body должен автоматически декодировать содержимое статьи, или это так? Вы смотрели на источник статьи? Следует указать кодировку.

В любом случае подпись PNG должна начинаться с \ x89PNG, но затем следует 0d 0a (CR LF). Это не так. Может ли это быть в кодировке base64 или что-то подобное? Все эти знаки выглядят очень знакомыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...