Вот пример письма
>>> import email
>>>
>>> text = """\
... From: =?koi8-r?B?1MXT1A==?= <from_abc@def>
... To: =?koi8-r?B?1MXT1A==?= <to_ghi@jkl>
... Subject: =?koi8-r?B?1MXT1A==?= subject
... mno body
... """
>>>
>>> msg = email.message_from_string(text)
>>>
>>> msg.get('from')
'=?koi8-r?B?1MXT1A==?= <from_abc@def>'
>>>
>>> msg.get('to')
'=?koi8-r?B?1MXT1A==?= <to_ghi@jkl>'
>>>
>>> msg.get('subject')
'=?koi8-r?B?1MXT1A==?= subject'
>>>
>>> msg.get_payload()
'mno body\n'
>>>
Если ты думаешь, что в письмах только темы могут быть закодированы, то ты глубоко заблуждаешься. Там не только могут быть закодированы разные заголовки, так ещё и один заголовок запросто может быть частично закодированным, частично незакодированным, частично закодирован в одну кодировку, частично закодирован в другую кодировку и ещё заголовок может быть закодирован отправителем в неправильную кодировку без указания названия этой кодировки. И всё это одновременно в одном заголовке может быть. Сюрпризов там много бывает.
rufus
Для моих задач будет достаточно просто перевод из koi8-r в UTF-8
Тебе придётся брать каждый заголовок, потом этот заголовок ещё разделять на незакодированные части и закодированные части, потом раскодировать закодированные части, а потом соединять этот заголовок обратно, чтобы получать заголовок из незакодированных частей и раскодированных частей. Конечный заголовок будет представлен в Unicode, который можно потом закодировать для хранения в UTF-8.
rufus
Читал на форумах что сначала нужно разбить на биты а потом пересобрать в другой кодировке, это у меня получилось сделать только в примере, вышло примерно как и у вас “b'\xd4\xc5\xd3\xd4'” , что делать дальше с этим добром, не могу понять, декодироваться в UTF-8 оно не хочет….
Видно, что ты ещё и в кодировках не смыслишь ничего
>>> b'\xd4\xc5\xd3\xd4'.decode('koi8-r')
'тест'
>>>
Наверняка ты ещё и не знаешь, что такое Unicode.
После раскодирования строки в питоне, она представлена в виде символов Unicode. У них нет кодировки вообще. Для сохранения в файл строки в питоне, нужно при открытии файла указать кодировку, в которой всё будет сохраняться в файл.
with open('file.txt', 'w', encoding='utf-8') as fout:
print('тест1', file=fout)
fout.write('тест2')
Строки тест1 и тест2, используемые в коде на питоне, не закодированы; они представляют из себя последовательности Unicode-символов. В Unicode находятся все символы мира. Кодировка UTF-8 может закодировать любой символ из Unicode. Про кодировки тебе придётся ещё прочитать всю теорию, потому что в двух словах её не расскажешь, а сам ты не догадаешься до неё, потому что она обширная. Но сложного в ней ничего нет.