Найти - Пользователи
Полная версия: Кодировка сообщени
Начало » Python для новичков » Кодировка сообщени
1 2 3
Alen
pablodiguerero
Но если сразу после строчки for uid, data in messages.iteritems(): вывести data, то увидим вот такой вот текст:

У Вас строка уже в utf-8.

>>> message = "\xd0\xa2\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xb7\xd0\xb0\xd1\x8f\xd0\xb2\xd0\xba\xd0\xb8"
>>> print message
Текст заявки
>>>
pablodiguerero
Я понимаю. Еще я понимаю, что делаю в коде лишний encode. Только я не знаю, где это нужно исправить?
Alen
pablodiguerero
Я понимаю. Еще я понимаю, что делаю в коде лишний encode. Только я не знаю, где это нужно исправить?

Если я правильно понимаю Вам нужно utf-8? Оно у вас и есть.
Чтобы преобразовать к читабельному виду:
# -*- coding: utf-8 -*-
message = "\xd0\xa2\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xb7\xd0\xb0\xd1\x8f\xd0\xb2\xd0\xba\xd0\xb8"
msg =  unicode(message, encoding='utf-8')
msg = msg.encode('utf-8')
pablodiguerero
Смотрите:
for uid, data in messages.iteritems():
после этого в data содержится нужная строка и много мусора. Потом парсим тело сообщения:
	msg = email.message_from_string(data['RFC822'].encode('utf8'))
Вот тут мы уже потеряли исходную строку и поручили иероглифы. Все пропало. Я так понимаю, что проблема тут в encode, но без нее работать не будет.
Alen
msg = email.message_from_string(data['RFC822'])

А так работает?
pablodiguerero
неа
  File "/usr/lib/python2.7/email/__init__.py", line 57, in message_from_string
return Parser(*args, **kws).parsestr(s)
File "/usr/lib/python2.7/email/parser.py", line 82, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1370-1389: ordinal not in range(128)

это первое, что мне пришло в голову
Alen
Python3 категорически не подходит?

>>> import email
>>> em = u'\u0422\u0435\u043a\u0441\u0442 \u0437\u0430\u044f\u0432\u043a\u0438'
>>> em
'Текст заявки'
>>>
>>> e = email.message_from_string(em)
>>> e.as_string()
'\nТекст заявки'
>>>
pablodiguerero
а с python 3 я дел до этого не имел, но вижу, что придется)
Alen
Минуточку, а Вы не в консоле случаем все это набирали, а то сейчас проверил всё работает.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import email
message = "\xd0\xa2\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xb7\xd0\xb0\xd1\x8f\xd0\xb2\xd0\xba\xd0\xb8"
em = email.message_from_string(message)
print em.as_string()

Никаких ошибок.
pablodiguerero
да вот я сейчас тоже самое сидел проверял, если честно, я сейчас просто в тупике
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