Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2014 21:08:08

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Кодировка сообщени

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
Текст заявки
>>>

Отредактировано Alen (Авг. 16, 2014 21:08:33)

Офлайн

#2 Авг. 16, 2014 21:15:15

pablodiguerero
Зарегистрирован: 2014-08-15
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка сообщени

Я понимаю. Еще я понимаю, что делаю в коде лишний encode. Только я не знаю, где это нужно исправить?

Офлайн

#3 Авг. 16, 2014 21:37:11

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Кодировка сообщени

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')

Офлайн

#4 Авг. 16, 2014 21:40:41

pablodiguerero
Зарегистрирован: 2014-08-15
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка сообщени

Смотрите:

for uid, data in messages.iteritems():
после этого в data содержится нужная строка и много мусора. Потом парсим тело сообщения:
	msg = email.message_from_string(data['RFC822'].encode('utf8'))
Вот тут мы уже потеряли исходную строку и поручили иероглифы. Все пропало. Я так понимаю, что проблема тут в encode, но без нее работать не будет.

Офлайн

#5 Авг. 16, 2014 22:15:03

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Кодировка сообщени

msg = email.message_from_string(data['RFC822'])

А так работает?

Офлайн

#6 Авг. 16, 2014 22:20:19

pablodiguerero
Зарегистрирован: 2014-08-15
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка сообщени

неа

  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)

это первое, что мне пришло в голову

Отредактировано pablodiguerero (Авг. 16, 2014 22:20:36)

Офлайн

#7 Авг. 16, 2014 22:33:37

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Кодировка сообщени

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Текст заявки'
>>>

Офлайн

#8 Авг. 16, 2014 22:34:59

pablodiguerero
Зарегистрирован: 2014-08-15
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка сообщени

а с python 3 я дел до этого не имел, но вижу, что придется)

Офлайн

#9 Авг. 16, 2014 22:42:30

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Кодировка сообщени

Минуточку, а Вы не в консоле случаем все это набирали, а то сейчас проверил всё работает.

#!/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()

Никаких ошибок.

Офлайн

#10 Авг. 16, 2014 22:43:31

pablodiguerero
Зарегистрирован: 2014-08-15
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировка сообщени

да вот я сейчас тоже самое сидел проверял, если честно, я сейчас просто в тупике

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version