Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 2, 2012 20:47:13

Cassum
Зарегистрирован: 2012-06-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировки в Python

Добрый день!
Не знаю, может, этот вопрос уже и поднимался, но несколько часов гугления мне нормально ответа так и не дали.
Проблема следующего характера: я получаю от какой-то библиотеки строку, которая изначально была в utf-8, но выглядит она как обычная ascii-шная строка с кучей символов, записанных в виде

\xd0\xa3\xd0\xba\xd0\xb0\xd0\xb6
Ну и далее в таком духе.
При попытке перекодировать её в UTF посредством
codecs.utf_8_encode
, получаю ту же самую строку, с теми же эскейпами символов, при попытке вывести print по этой строке (уже перекодированной), получаю всё то же самое. При попытке сделать print по оригинальной строке - падаю с ощибкой UnicodeDecodeError.
А дальше совсем интересно: обычное
>>> a = 'привет'
>>> a
'\xaf\xe0\xa8\xa2\xa5\xe2'
>>> print a
привет
Проходит абсолютно нормально и без ошибок. Кто-нибудь знает, в чём может быть проблема и как её решить?

Офлайн

#2 Дек. 2, 2012 21:55:11

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Кодировки в Python

Вот ваша строка

>>> print '\xd0\xa3\xd0\xba\xd0\xb0\xd0\xb6'
Укаж
>>>
не вижу проблемы.

Офлайн

#3 Дек. 2, 2012 22:11:55

Cassum
Зарегистрирован: 2012-06-23
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Кодировки в Python

У меня то же самое выглядит следующим образом:

>>> print '\xd0\xa3\xd0\xba\xd0\xb0\xd0\xb6'
╨г╨║╨░╨╢

и ещё маленький момент, посмотрел внимательней, падает не на символах \x, а на тех, что начинаются с \u:
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position
 422: character maps to <undefined>

Офлайн

#4 Дек. 2, 2012 22:34:05

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Кодировки в Python

эта строка в utf-8. Переведите в кодировку вашей консоли

print '\xd0\xa3\xd0\xba\xd0\xb0\xd0\xb6'.decode("utf-8").encode(ваша кодировка)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version