Pyll: urllib.quote и urllib.unquote неправильно обрабатывают Unicode
urllib
вообще не обрабатывает Unicode.URL-адреса не содержат не-ASCII символов, по определению.Когда вы имеете дело с urllib
, вы должны использовать только байтовые строки.Если вы хотите, чтобы они представляли символы Unicode, вам придется кодировать и декодировать их вручную.
IRI может содержать символы не ASCII, кодируя их как последовательности UTF-8, но Python не делаетt, на данный момент, есть irilib
.
Кодирование значения в UTF8 также не работает:
In [6]: print urllib.unquote(urllib.quote(u'Cataño'.encode('utf8')))
Cataño
Ах, хорошо, теперь вынабрав Unicode в консоли и выполнив print
-Unicode для консоли.Как правило, это ненадежно, особенно в Windows и в вашем случае с консолью IPython .
Введите длинный путь с последовательностями с обратной косой чертой, и вам будет легче увидеть, что бит urllib
на самом деле работает:
>>> u'Cata\u00F1o'.encode('utf-8')
'Cata\xC3\xB1o'
>>> urllib.quote(_)
'Cata%C3%B1o'
>>> urllib.unquote(_)
'Cata\xC3\xB1o'
>>> _.decode('utf-8')
u'Cata\xF1o'