Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 1, 2010 09:43:03

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Транслит и кодировка в 2.6.

Делаю словарик, в котором русские буквы сопоставлены английским и функцию перевода, файл со скриптом в utf-8.

conversion = {'а' : 'a', 'б' : 'b', 'в' : 'v', 'г' : 'g', 'д' : 'd', 'е' : 'e', 'ё' : 'e',
'ж' : 'zh', 'з' : 'z', 'и' : 'i', 'й' : 'j', 'к' : 'k', 'л' : 'l', 'м' : 'm',
'н' : 'n', 'о' : 'o', 'п' : 'p', 'р' : 'r', 'с' : 's', 'т' : 't', 'у' : 'u',
'ф' : 'f', 'х' : 'h', 'ц' : 'c', 'ч' : 'ch', 'ш' : 'sh', 'щ' : 'sch', 'ь' : "i",
'ы' : 'y', 'ь' : "i", 'э' : 'e', 'ю' : 'ju', 'я' : 'ja', ' ' : ' '}
def translit(key):
name = ""
for lt in key:
try:
lt = conversion[lt]
except KeyError:
alpha = "abcdefghijklmnopqrstuvwxyz"
if not lt in alpha:
lt = "-"
name += lt
return name
Беру слова из файла (он тоже в utf-8), пытаюсь применить к ним функцию translit - не выходит. Насколько понял - это из-за того, что у словаря своё представление строк типа \xd33. Как быть? Пока выкручиваюсь таким образом, ставлю у файла скрипта кодировку cp1251 и перевожу слово в эту же кодировку decode('utf8').encode('cp1251'), так всё получается.



Офлайн

#2 Авг. 1, 2010 09:52:43

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Транслит и кодировка в 2.6.

plusplus
представление строк типа \xd33
Тоже с похожей проблемой проковырялся как-то два дня, но так до конца и не разобрался в причинах. Но решение выработал вполне универсальное (мне пока в таких случаях помогает): перевести всё в юникод, решить задачу, перевести в обратно.



Офлайн

#3 Авг. 2, 2010 15:09:14

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Транслит и кодировка в 2.6.

plusplus
зачем оно тебе? Используй готовый модуль pytils



Офлайн

#4 Авг. 2, 2010 16:44:29

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Транслит и кодировка в 2.6.

Офлайн

#5 Авг. 5, 2010 13:45:23

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Транслит и кодировка в 2.6.

Спасибо за модули.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version