Python urllib urlencode problem with æøå
Asked Answered
B

2

5

How can I urlencode a string with special chars æøå?

ex.

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

I get this error :(..

not a valid non-string sequence or mapping object

Benevolent answered 22/10, 2010 at 12:55 Comment(0)
A
9

You should pass dictionary to urlencode, not a string. See the correct example below:

from urllib import urlencode
print 'http://www.test.com/?' + urlencode({'q': 'testæøå'})
Anemoscope answered 22/10, 2010 at 13:2 Comment(0)
P
26

urlencode is intended to take a dictionary, for example:

>>> 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'

If you just want to URL-encode a single string, the function you're looking for is quote:

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

I'm guessing UTF-8 is the right encoding (it should be, for modern sites). If what you actually want ?q=%E6%F8%E5, then the encoding you want is probably cp1252 (similar to iso-8859-1).

Pasteup answered 22/10, 2010 at 13:3 Comment(0)
A
9

You should pass dictionary to urlencode, not a string. See the correct example below:

from urllib import urlencode
print 'http://www.test.com/?' + urlencode({'q': 'testæøå'})
Anemoscope answered 22/10, 2010 at 13:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.