2011-02-07 19 views
6

Necesito url codificar nombres extranjeros, como "Misère".¿Cómo codificar correctamente los acentos de URL?

Cuando hago:

urllib2.quote(name) 

me sale un error:

File "/System/Library/Frameworks/Python.framework/Versions/ 
2.5/lib/python2.5/urllib.py", line 1205, in quote 
    res = map(safe_map.__getitem__, s) 
KeyError: u'\xe8' 

¿Qué estoy haciendo mal?

Respuesta

12

urllib2.quote intento (s.encode ('UTF-8'))

+1

¡Eso funcionó, gracias! –

0

una ligera mejora de la respuesta @ 苏妍倩 's sería incluir caracteres de seguridad en la llamada al método. De forma predeterminada, urllib2.quote() solo incluye /_-. como un carácter seguro, lo que significa que los caracteres como : se convertirán, haciendo que la url sea inútil.

Por ejemplo:

url = https://www.zomato.com/pittsburgh/caffè-damore-catering-pittsburgh 
print urllib2.quote(url.encode('utf-8')) 
>>> https%3A//www.zomato.com/pittsburgh/caff%C3%A8-damore-catering-pittsburgh 

print urllib2.quote(url.encode('utf-8'),':/') 
>>> https:////www.zomato.com/pittsburgh/caff%C3%A8-damore-catering-pittsburgh 

Aviso la ligera diferencia en las salidas en la parte https de la URL.

¡Espero que esto le ahorre a otra persona el tiempo que me tomó resolver esto!

Cuestiones relacionadas