mysite.com/Текст на кирилица
не является URL-адресом:
- , поскольку в нем пропущена схема
http://
(или другая); - содержит пробелы, которые недопустимы;
- , потому что URI не может содержать символы не ASCII.Только IRI могут, и
urllib2
их не поддерживает.
Так что вам нужно будет исправить разрывы,% -кодирование вне символов полосы (например, пробел ->%20
), добавьте схему, если она отсутствует, и затем преобразуйте IRI в URI.Чтобы выполнить это преобразование, вам необходимо кодировать часть адреса узла с помощью алгоритма IDN (Python: s.encode('idna')
), а затем кодировать любые символы, не входящие в ASCII, в других частях адреса с использованием UTF-8.затем% -encoding.
В итоге вы хотите получить:
http://mysite.com/%D0%A2%D0%B5%D0%BA%D1%81%D1%82%20%D0%BD%D0%B0%20%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%B8%D1%86%D0%B0
, который является действительным URI, принятым urllib2
, но также отображается как http://mysite.com/Текст на кирилица
в браузереадресная строка, когда вы следуете за ней.
Существует множество функций, которые реализуют IRI-to-URI (большинство веб-фреймворков Python имеют что-то подобное, например).Если вы хотите полностью справиться с исправлением и нормализацией подозрительных входящих URL-адресов, есть также this .