@nurzhannogerbek

Как правильно заменить символы латиница на символы кириллицы в тексте?

Здравствуйте! Помогите пожалуйста разобраться.

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

Пользователь по ошибки в слове "Cтрана X" ввел буквы "С" и "Х" на латинице, а остальные буквы на кириллице. Далее, когда пользователь производит поиск и вводит на кириллице слово "Страна" - ничего не выводится. Результат выводится лишь, когда пользователь вводит слова "Cтрана", где С написано латиницей. В базе данных хочу записывать все сразу на кириллице. Пытаюсь использовать следующий код, но он не помог. Как правильно заменить буквы в словах?

# Без этих импортов выводится ошибка: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

# Латинские буквы 'ETOPAHKXCBMetopahkxcbm'
# Буквы кирилицы 'ЕТОРАНКХСВМеторанкхсвм'
WORDS = {
    "E": "Е",
    "T": "Т",
    "O": "О",
    "P": "Р",
    "A": "А",
    "H": "Н",
    "K": "К",
    "X": "Х",
    "C": "С",
    "B": "В",
    "M": "М",
    "e": "е",
    "t": "т",
    "o": "о",
    "p": "р",
    "a": "а",
    "h": "н",
    "k": "к",
    "x": "х",
    "c": "с",
    "b": "в",
    "m": "м"
}

***
def form_valid(self, form):
        title = form.cleaned_data['title'] # Поле формы
        for key in WORDS.keys():
            title = head.replace(key, str(WORDS[key])) # Замена не срабатывает
        form.save()
  • Вопрос задан
  • 705 просмотров
Решения вопроса 2
@deliro
Вручную маппинг одной буквы в другую писать. Надо же.
eng = 'ETOPAHKXCBMetopahkxcbm'
rus = 'ЕТОРАНКХСВМеторанкхсвм'
mapping = str.maketrans(dict(zip(eng, rus)))
'tvoya stroka'.translate(mapping)  # 'тvоyа sтrока'
Ответ написан
adugin
@adugin
trans_table = str.maketrans('ETOPAHKXCBMetopahkxcbm', 'ЕТОРАНКХСВМеторанкхсвм')
'Cтрана X'.translate(trans_table)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы