Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 10, 2011 04:01:17

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

s.encode('cp1251') errors

Еще раз про кодировки
Обычный русский текст перекодируется нормально, но при наличии всяких других символов постоянно получаю результат типа:
'charmap' codec can't encode character u'\xf3' in position 31: character maps to…
Чтобы с этим бороться написал себе функцию типа:
table = (
(u'\u0103', u“a”), #LATIN SMALL LETTER A WITH BREVE
(u'\u0131', u“i”), #LATIN SMALL LETTER DOTLESS I

(u'\xc0', u“A”), #LATIN CAPITAL LETTER A WITH GRAVE
(u'\xc1', u“A”), #LATIN CAPITAL LETTER A WITH ACUTE
(u'\xc4', u“A”), #LATIN CAPITAL LETTER A WITH DIAERESIS
(u'\xc9', u“E”), #LATIN CAPITAL LETTER E WITH ACUTE

(u'\xf3', u“o”), #LATIN SMALL LETTER O WITH ACUTE
(u'\xf6', u“o”), #LATIN SMALL LETTER O WITH DIAERESIS
(u'\xfa', u“u”), #LATIN SMALL LETTER U WITH ACUTE
(u'\xfc', u“u”), #LATIN SMALL LETTER U WITH DIAERESIS
)
for symb_in, symb_out in table:
s = s.replace(symb_in, symb_out)
return s
Вызываю ее перед перекодировкой и изредка добавляю что-нибудь в таблицу.
Но мне кажется, что это как-то не правильно…



Офлайн

#2 Ноя. 10, 2011 04:41:22

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

s.encode('cp1251') errors

Он не может закодировать эти символы в cp1251 т.к. таблица cp1251 не содержит эти символы. Используйте utf-8.

Офлайн

#3 Ноя. 10, 2011 18:05:48

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

s.encode('cp1251') errors

Спасибо, я в общем это понимаю..
Из-за utf-8 я не могу в половине случаев видеть, что происходит в виндовой консоли, т.к. мне не напечатать некоторые строчки на русском которые я обрабатываю.
Приходится просто писать в файл, а потом смотреть на каком этапе работа.
Это кажется обсуждалось (что то про chcp 65001 и т.д.)

Нет какой-нибудь готовой библиотеки которая умеет заменять одни визуально похожие буквы на другие для произвольной кодировки?
Чтобы были полные таблицы.



Офлайн

#4 Ноя. 10, 2011 18:19:44

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

s.encode('cp1251') errors

unicode -> mbcs -> unicode -> cp866 ?
Способ замысловат, но должен сработать.



Офлайн

#5 Ноя. 10, 2011 20:55:49

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

s.encode('cp1251') errors

ок. спасибо попробую



Офлайн

#6 Ноя. 11, 2011 03:04:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9999
Репутация: +  857  -
Профиль   Отправить e-mail  

s.encode('cp1251') errors

severum
Нет какой-нибудь готовой библиотеки которая умеет заменять одни визуально похожие буквы на другие для произвольной кодировки?
можешь использовать другую схему обработки ошибок
help(''.encode)
там есть встроенные, а можно свою сделать (несложно)
тогда определённые символы будут заменяться на нужные символы
попробуй xmlcharrefreplace

>>> u'абвabc'.encode('ascii', 'xmlcharrefreplace')
'абвabc'
>>>
(очень нехорошо, xml-ссылки заменяются форумом даже в теге code)
картинка



Отредактировано (Ноя. 11, 2011 03:12:32)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version