Проблема с Python urllib urlencode с ошибкой - PullRequest
5 голосов
/ 22 октября 2010

Как я могу urlencode строки с особыми символами?

ех.

urllib.urlencode('http://www.test.com/q=testæøå')

Я получаю эту ошибку: (..

недопустимая нестроковая последовательность или объект отображения

Ответы [ 2 ]

26 голосов
/ 22 октября 2010

urlencode предназначен для использования словаря, например:

>>> q= u'\xe6\xf8\xe5' # u'æøå'
>>> params= {'q': q.encode('utf-8')}
>>> 'http://www.test.com/?'+urllib.urlencode(params)
'http://www.test.com/?q=%C3%A6%C3%B8%C3%A5'

Если вы просто хотите URL-кодировать одну строку, вам нужна функция quote:

>>> 'http://www.test.com/?q='+urllib.quote(q.encode('utf-8'))
'http://www.test.com/?q=%C3%A6%C3%B8%C3%A5'

Я предполагаю, что UTF-8 - правильная кодировка (так должно быть для современных сайтов).Если вы действительно хотите ?q=%E6%F8%E5, то, вероятно, вам нужна кодировка cp1252 (аналогично iso-8859-1).

9 голосов
/ 22 октября 2010

Вы должны передать словарь в urlencode, а не в строку. Смотрите правильный пример ниже:

from urllib import urlencode
print 'http://www.test.com/?' + urlencode({'q': 'testæøå'})
...