Форум сайта python.su
22
привет.
Подскажите пожалуйста, как происходит перекодировка строк из одной кодировки в другую?
Например, из utf-8 в cp1251.
я предполагаю что каждому u'\u0497' соответствует конкретный байт из cp1251?
А если такого соответствия нет, то получаем ошибку EncodeError.
конкретно столкнулся с такой проблемой. encode татарских символов в cp1251
>>> f = open('1.txt', 'w') >>> f.write((u'Шамилҗ').encode('cp1251')) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/encodings/cp1251.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_table) UnicodeEncodeError: 'charmap' codec can't encode character u'\u0497' in position 5: character maps to <undefined>
Офлайн
47
в CP1251 разве есть татарские символы?
http://ru.wikipedia.org/wiki/Windows-1251
EDIT: пролистал вниз и увидел разные подварианты, но я думаю это хаки под конкретную локализацию, python об этом ничего не знает
Отредактировано bismigalis (Окт. 14, 2013 10:31:10)
Офлайн
22
нет их там.
Поэтому и интересовался про механизм кодировки.
Наверное придется делать такой костыль?
u'Шамилҗ'.replace(u'җ', u'ж')
Офлайн
47
в CP1251 стоит символ ‘ќ’ на месте ‘җ’ в татарском варианте
т.е. я думаю можно сделать так
text = u'Шамилҗ' text.replace(u'җ', u'ќ') text.encode('cp1251')
Отредактировано bismigalis (Окт. 14, 2013 10:41:46)
Офлайн
22
но если пользователь откроет этот файл. Со шрифтом без поддержки татарского, то у него отобразится ќ. что введет в его заблуждение что у него что-то сломалось.
за идею спасибо. Приму к сведению.
Офлайн
857
ilnurв третьем питоне ты раскодируешь байты из utf-8 в кодовые точки unicode (unicode - это не кодировка), затем из кодовых точек unicode ты кодируешь в байты в cp1251
Подскажите пожалуйста, как происходит перекодировка строк из одной кодировки в другую?
Например, из utf-8 в cp1251.
Офлайн