Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2013 10:06:52

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

механизм перекодировки файлов

привет.

Подскажите пожалуйста, как происходит перекодировка строк из одной кодировки в другую?
Например, из 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>

Офлайн

#2 Окт. 14, 2013 10:22:22

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

механизм перекодировки файлов

в CP1251 разве есть татарские символы?
http://ru.wikipedia.org/wiki/Windows-1251

EDIT: пролистал вниз и увидел разные подварианты, но я думаю это хаки под конкретную локализацию, python об этом ничего не знает

Отредактировано bismigalis (Окт. 14, 2013 10:31:10)

Офлайн

#3 Окт. 14, 2013 10:34:05

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

механизм перекодировки файлов

нет их там.

Поэтому и интересовался про механизм кодировки.
Наверное придется делать такой костыль?

u'Шамилҗ'.replace(u'җ', u'ж')

Офлайн

#4 Окт. 14, 2013 10:41:22

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

механизм перекодировки файлов

в CP1251 стоит символ ‘ќ’ на месте ‘җ’ в татарском варианте
т.е. я думаю можно сделать так

text = u'Шамилҗ'
text.replace(u'җ', u'ќ')
text.encode('cp1251')

чтобы в итоге получить татарский текст

Отредактировано bismigalis (Окт. 14, 2013 10:41:46)

Офлайн

#5 Окт. 14, 2013 10:52:54

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

механизм перекодировки файлов

но если пользователь откроет этот файл. Со шрифтом без поддержки татарского, то у него отобразится ќ. что введет в его заблуждение что у него что-то сломалось.

за идею спасибо. Приму к сведению.

Офлайн

#6 Окт. 14, 2013 23:41:37

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

механизм перекодировки файлов

ilnur
Подскажите пожалуйста, как происходит перекодировка строк из одной кодировки в другую?
Например, из utf-8 в cp1251.
в третьем питоне ты раскодируешь байты из utf-8 в кодовые точки unicode (unicode - это не кодировка), затем из кодовых точек unicode ты кодируешь в байты в cp1251

utf-8 - это кодировка для unicode (65536 * 17 = 1114112 кодовых точек)
то есть она может закодировать в виде байтов любую кодовую точку юникода

в то время как cp1251 - это однобайтовая кодировка, которая может закодировать только 256 кодовых точек юникода

соответственно, из cp1251 в utf-8 ты всегда можешь перевести байты, а из utf-8 в cp1251 - только когда там закодирована кодовая точка, представимая в cp1251



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version