Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 20, 2012 16:21:54

igorakintev
Зарегистрирован: 2012-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена английских символов на русские (смена раскладки)

Бывает такое что пользователь отправил данные на английской раскладке, необходимо англ. символы заменить соответствующими на русском.

Вопрос как это сделать?

С maketrans не получается из-за того что разные длины получаются ну и соответственно ругается.

Что-то типа

from string import maketrans   # Required to call maketrans function.
import string
intab = "~!@#$%^&qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?"
outtab = "ёЁ!\"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
trantab = string.maketrans(intab, outtab)
str = "ghbdtn vbh";
print str.translate(trantab, 'xm');

Отредактировано igorakintev (Сен. 20, 2012 16:23:23)

Офлайн

#2 Сен. 20, 2012 17:01:42

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Замена английских символов на русские (смена раскладки)

Создаете словарь с отображением из латиницы в кириллицу и для каждого символа из полученной строки берете соответствующий ключ из словаря.



Офлайн

#3 Сен. 20, 2012 17:14:02

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Замена английских символов на русские (смена раскладки)

fata1ex
Создаете словарь с отображением из латиницы в кириллицу и для каждого символа из полученной строки берете соответствующий ключ из словаря.
Вот, делал уже такое:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
_eng_chars = u"~!@#$%^&qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?"
_rus_chars = u"ё!\"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
_trans_table = dict(zip(_eng_chars, _rus_chars))
 
def fix_layout(s):
    return u''.join([_trans_table.get(c, c) for c in s])

Офлайн

#4 Сен. 20, 2012 17:23:31

igorakintev
Зарегистрирован: 2012-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Замена английских символов на русские (смена раскладки)

reclosedev
fata1ex
Создаете словарь с отображением из латиницы в кириллицу и для каждого символа из полученной строки берете соответствующий ключ из словаря.
Вот, делал уже такое:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
_eng_chars = u"~!@#$%^&qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?"
_rus_chars = u"ё!\"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"
_trans_table = dict(zip(_eng_chars, _rus_chars))
 
def fix_layout(s):
    return u''.join([_trans_table.get(c, c) for c in s])

Спасибо, то что нужно, работает как часы)

Офлайн

#5 Сен. 20, 2012 17:55:39

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Замена английских символов на русские (смена раскладки)

Работает, потому что у него длины одинаковые. Вставь строки себе и может и у тебя получиться.

Офлайн

#6 Сен. 20, 2012 18:06:19

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Замена английских символов на русские (смена раскладки)

odnochlen
Работает, потому что у него длины одинаковые. Вставь строки себе и может и у тебя получиться.
Нет, тогда тоже через maketrans пробовал. В utf-8 некоторые символы больше одного байта, в этом проблема.
In [1]: u'п'.encode('utf8')
Out[1]: '\xd0\xbf'
А менять кодировку файла - думаю, не выход.

Офлайн

#7 Сен. 21, 2012 04:00:34

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

Замена английских символов на русские (смена раскладки)

igorakintev
С maketrans не получается из-за того что разные длины получаются ну и соответственно ругается.
в третьем питоне нормально, там они по-другому сделаны



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version