Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2011 07:54:25

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

utf-8 -> unicode (русская кириллица + украинские i)

Привет, форум!

Столкнулся с проблемкой в консольных приложениях и скриптах на python.
Бывает, что в распарсенном тексте обнаруживаются украинские слова, которые содержа в себе u'\u0456' - то есть, буква i.
Изначально, текст в utf-8, но при декодировании в юникод и попытке последующего вывода print'ом в консоль - вываливается ошибка:

Traceback (most recent call last):
File "ring.py", line 3, in <module>
print s.decode("utf-8")
File "C:\Python27\lib\encodings\cp866.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0456' in position 1: character maps to <undefined>
Понятное дело, что я не знаю, как быть с этим. Кстати, .decode(“utf-8”, “replace”) и “ignore” не работают :(
ПОМОГИТЕ!!!



Офлайн

#2 Июнь 12, 2011 08:13:24

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

utf-8 -> unicode (русская кириллица + украинские i)

print s.decode("utf-8").encode("cp866", "ignore")
или производите замену
print s.decode("utf-8").replace(u'\u0456', u'i')



Офлайн

#3 Июнь 12, 2011 09:03:11

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

utf-8 -> unicode (русская кириллица + украинские i)

Nik
print s.decode("utf-8").encode("cp866", "ignore")
Вот это подходит, но иногда я пользую то консоль, то шелл, то вообще шелл в Aptana.
Спасибо!

ЗЫ.
Nik
print s.decode("utf-8").replace(u'\u0456', u'i')
ну это ни в какие ворота =)



Офлайн

#4 Июнь 12, 2011 09:13:56

Nik
От:
Зарегистрирован: 2010-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

utf-8 -> unicode (русская кириллица + украинские i)

Chrizt
но иногда я пользую то консоль, то шелл, то вообще шелл в Aptana.
Кодировка терминала доступна через атрибут encoding объекта stdout.
>>> import sys
>>> sys.stdout.encoding
Укажите атрибут вместо кодировки cp866 и будет вам счастье. :)



Офлайн

#5 Июнь 12, 2011 09:15:42

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

utf-8 -> unicode (русская кириллица + украинские i)

Nik
Chrizt
но иногда я пользую то консоль, то шелл, то вообще шелл в Aptana.
Кодировка терминала доступна через атрибут encoding объекта stdout.
>>> import sys
>>> sys.stdout.encoding
Укажите атрибут вместо кодировки cp866 и будет вам счастье. :)
Да эт я в курсе, спасибо =))



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version