2010-10-22 21 views
5

Comment puis-je urlencode une chaîne avec des caractères spéciaux æøå?Python urlibode urlencode problème avec æøå

ex.

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

Je reçois cette erreur :(..

pas une séquence non-chaîne valide ou objet de mappage

Répondre

9

Vous devez passer le dictionnaire à UrlEncode, pas une chaîne. Voir l'exemple correct ci-dessous:

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

urlencode est destiné à prendre un dictionnaire, par exemple:

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

Si vous voulez juste encode une seule chaîne, la fonction que vous cherchez est quote:

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

Je suis deviner UTF-8 est le bon codage (il devrait être, pour les sites modernes). Si ce que vous voulez réellement ?q=%E6%F8%E5, alors l'encodage que vous voulez est probablement cp1252 (similaire à iso-8859-1).