Как в django в GET-параметрах для кириллицы заменить ANSI-кодирование на Unicode-кодирование и сделать переадресацию на новый адрес?

Есть сайт с поисковой формой. Запросы в форму отправляются на кириллице.
Все работает отлично. Но есть проблема.

При вводе в поисковой форме, например, слова "уезд", браузер отображает адрес:
https://example.com/?search=уезд
Это обычное поведение браузеров, которые при отображении заменяют кодированные адреса на читаемые.

Если этот url адрес скопировать в буфер обмена и вставить, например, в блокнот, то получим:
https://example.com/?search=%D1%83%D0%B5%D0%B7%D0%B4

Т.е. кириллица (слово "уезд") в Unicode закодировано. Это нормальный рабочий адрес, который можно вставлять на форумах итп. Большая часть ссылок, которые пользователи сайта оставляют в интернете именно такие (правильные).

Но по какой-то причине иногда пользователи сайта размещают ссылки в таком виде:
https://example.com/?search=%F3%E5%E7%E4
Здесь тоже самое слово "уезд" закодировано в ANSI. Как они такие ссылки из браузера копируют, я не знаю. Может какие-то браузеры необычные это делают. Может быть это особенность каких-то программ на мобильных устройствах. Может от операционной системы зависит... Главное здесь то, что после открытия такой ссылке в поисковом поле вместо нормального слова указано '����' и естественно вместо ожидаемых результатов поиска - нулевой результат.
Если в django во view.py вывести в консоль через print параметр requests.GET["search"], то он тоже отображается, как '����' , т.е., вероятно, во view.py с ним уже ничего не сделаешь.

Вопрос мой следующий. Как в django определить, что в url в GET-параметрах для кириллицы использовано ANSI-кодирование и как раскодировать для использования эти параметры. Или, что лучше, - как сделать переадресацию на аналогичный, но "правильный" адрес с кодированием в Unicode?

Т.е. я хочу, чтобы адреса и с ANSI, и c Unicode закодированной кириллицей обрабатывались правильно.

Я пробовал играть в консоли. Саму строку url я могу раскодировать из ANSI-кодирования в читаемый текст и затем могу закодировать в правильный вариант по правилам Unicode. Но в django у меня такое не получается. Плюс я не знаю, в каком месте как это правильнее делать.
import urllib.parse

original = "%F3%E5%E7%E4"

unquoted = urllib.parse.unquote(original, encoding="ANSI")
print(unquoted)  # -> уезд

quoted = urllib.parse.quote(unquoted)
print(quoted)  # -> %D1%83%D0%B5%D0%B7%D0%B4
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
тут что не подошло?
Ответ написан
Ваш ответ на вопрос

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

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