Забираю сообщения через IMAPClient в несколько потоков. Кодировка терминала utf-8, в основном
приложении utf-8, в потоке utf-8. Сообщения возвращаются в koi8-r. Как привести сообщения в utf-8, чтобы их текст корректно отображался в терминале?
pablodiguereroКогда получил сообщение, переводи в Unicode, дальше можешь перевести во что угодно или так оставить.
Как привести сообщения в utf-8,
ц░б╫ц░б╣ ц▒б│ц░б╨ц░б╟ц░б╥ц░б╟ц░б╩,
koir_string = 'sdfsf' unicode_string = koir_string.decode('koi8-r') utf8_string = unicode_string.encode('utf-8')
pablodiguerero
Что тут не так?
return self.imap_con.fetch(messages, ['RFC822'])
for msgid, data in messages.iteritems(): message = email.message_from_string(data['RFC822'])
for part in message.walk(): #~ --- elif part.get_content_type() == "text/plain": if body is None: body = "" body += unicode(part.get_payload(decode=True), enc, 'replace').encode('utf8','replace') elif part.get_content_type() == "text/html": if html is None: html = "" html += unicode(part.get_payload(decode=True), enc, 'replace').encode('utf8','replace')
open(('/tmp/%d.log') % (msgid), 'w').write("%s\n" % data['html'])
def exmaple(): self.imap_con = IMAPClient(self.options['server'], self.options['port'], True, self.options['use_ssl']) self.imap_con.login(self.options['login'], self.options['password']) self.imap_con.select_folder(unicode(folder, 'utf-8')) messages = self.imap_con.search(('UID %d:%d')%(mfrom, mto)) messages = self.imap_con.fetch(messages, ['RFC822']) for message in messages: body = "" html = "" for part in message.walk(): if part.get_content_type() == "text/plain": body += unicode(part.get_payload(decode=True), enc, 'replace').encode('utf8','replace') elif part.get_content_type() == "text/html": html += unicode(part.get_payload(decode=True), enc, 'replace').encode('utf8','replace')
connect = IMAPClient("imap.yandex.com", 993, True, True) connect.login("bitrix@sipg.ru", "+++") connect.select_folder("INBOX") messages = connect.search(('UID %d:%d')%(1,10)) messages = connect.fetch(messages, ['RFC822']) for uid, data in messages.iteritems(): msg = email.message_from_string(data['RFC822'].encode('utf8')) for part in msg.walk(): if part.get_content_type() == "text/html": text = part.get_payload() print text
<table><tr>
<td style='padding: 5px;'><strong>ТекÑÑ Ð·Ð°Ñвки</strong></td>
<td style='padding: 5px;'>ÐÐ¾Ð¼ÐµÑ Ð·Ð°Ñвки: 5
ÐÐ¾Ð¼ÐµÑ ÐºÐ²Ð°ÑÑиÑÑ: 66
ÐÐ¾Ð¼ÐµÑ Ð¿Ð¾Ð´Ñезда: 2
ÐÑаж: 2
СÑоимоÑÑÑ:
</td>
</tr><tr>
<td style='padding: 5px;'><strong>ФÐÐ</strong></td>
<td style='padding: 5px;'>yuhj</td>
</tr><tr>
<td style='padding: 5px;'><strong>ÐлекÑÑÐ¾Ð½Ð½Ð°Ñ Ð¿Ð¾ÑÑа</strong></td>
<td style='padding: 5px;'>jhg</td>
</tr><tr>
<td style='padding: 5px;'><strong>ТелеÑон</strong></td>
<td style='padding: 5px;'>jhg</td>
</tr></table>
<table><tr>\r\n\t\t\t<td style='padding: 5px;'><strong>\xd0\xa2\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xb7\xd0\xb0\xd1\x8f\xd0\xb2\xd0\xba\xd0\xb8</strong></td>\r\n\t\t\t<td style='padding: 5px;'>\xd0\x9d\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x80 \xd0\xb7\xd0\xb0\xd1\x8f\xd0\xb2\xd0\xba\xd0\xb8: 5\r\n\xd0\x9d\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x80 \xd0\xba\xd0\xb2\xd0\xb0\xd1\x80\xd1\x82\xd0\xb8\xd1\x80\xd1\x8b: 66\r\n\xd0\x9d\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x80 \xd0\xbf\xd0\xbe\xd0\xb4\xd1\x8c\xd0\xb5\xd0\xb7\xd0\xb4\xd0\xb0: 2\r\n\xd0\xad\xd1\x82\xd0\xb0\xd0\xb6: 2\r\n\xd0\xa1\xd1\x82\xd0\xbe\xd0\xb8\xd0\xbc\xd0\xbe\xd1\x81\xd1\x82\xd1\x8c: \r\n</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td style='padding: 5px;'><strong>\xd0\xa4\xd0\x98\xd0\x9e</strong></td>\r\n\t\t\t<td style='padding: 5px;'>yuhj</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td style='padding: 5px;'><strong>\xd0\xad\xd0\xbb\xd0\xb5\xd0\xba\xd1\x82\xd1\x80\xd0\xbe\xd0\xbd\xd0\xbd\xd0\xb0\xd1\x8f \xd0\xbf\xd0\xbe\xd1\x87\xd1\x82\xd0\xb0</strong></td>\r\n\t\t\t<td style='padding: 5px;'>jhg</td>\r\n\t\t</tr><tr>\r\n\t\t\t<td style='padding: 5px;'><strong>\xd0\xa2\xd0\xb5\xd0\xbb\xd0\xb5\xd1\x84\xd0\xbe\xd0\xbd</strong></td>\r\n\t\t\t<td style='padding: 5px;'>jhg</td>\r\n\t\t</tr></table>\r\n