Есть сайт с поисковой формой. Запросы в форму отправляются на кириллице.
Все работает отлично. Но есть проблема.
При вводе в поисковой форме, например, слова "уезд", браузер отображает адрес:
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