Форум сайта python.su
Еще раз про кодировки
Обычный русский текст перекодируется нормально, но при наличии всяких других символов постоянно получаю результат типа:
'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
Вызываю ее перед перекодировкой и изредка добавляю что-нибудь в таблицу.
Но мне кажется, что это как-то не правильно…
Офлайн
Он не может закодировать эти символы в cp1251 т.к. таблица cp1251 не содержит эти символы. Используйте utf-8.
Офлайн
Спасибо, я в общем это понимаю..
Из-за utf-8 я не могу в половине случаев видеть, что происходит в виндовой консоли, т.к. мне не напечатать некоторые строчки на русском которые я обрабатываю.
Приходится просто писать в файл, а потом смотреть на каком этапе работа.
Это кажется обсуждалось (что то про chcp 65001 и т.д.)
Нет какой-нибудь готовой библиотеки которая умеет заменять одни визуально похожие буквы на другие для произвольной кодировки?
Чтобы были полные таблицы.
Офлайн
unicode -> mbcs -> unicode -> cp866 ?
Способ замысловат, но должен сработать.
Офлайн
ок. спасибо попробую
Офлайн
severumможешь использовать другую схему обработки ошибок
Нет какой-нибудь готовой библиотеки которая умеет заменять одни визуально похожие буквы на другие для произвольной кодировки?
help(''.encode)
>>> u'абвabc'.encode('ascii', 'xmlcharrefreplace')
'абвabc'
>>>
Отредактировано (Ноя. 11, 2011 03:12:32)
Офлайн