Найти - Пользователи
Полная версия: Замена английских символов на русские (смена раскладки)
Начало » Python для новичков » Замена английских символов на русские (смена раскладки)
1
igorakintev
Бывает такое что пользователь отправил данные на английской раскладке, необходимо англ. символы заменить соответствующими на русском.

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

С 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');
fata1ex
Создаете словарь с отображением из латиницы в кириллицу и для каждого символа из полученной строки берете соответствующий ключ из словаря.
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])
igorakintev
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])

Спасибо, то что нужно, работает как часы)
odnochlen
Работает, потому что у него длины одинаковые. Вставь строки себе и может и у тебя получиться.
reclosedev
odnochlen
Работает, потому что у него длины одинаковые. Вставь строки себе и может и у тебя получиться.
Нет, тогда тоже через maketrans пробовал. В utf-8 некоторые символы больше одного байта, в этом проблема.
In [1]: u'п'.encode('utf8')
Out[1]: '\xd0\xbf'
А менять кодировку файла - думаю, не выход.
py.user.next
igorakintev
С maketrans не получается из-за того что разные длины получаются ну и соответственно ругается.
в третьем питоне нормально, там они по-другому сделаны
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB