Как правильно URL кодировать акценты? - PullRequest
6 голосов
/ 07 февраля 2011

Мне нужно url кодировать иностранные имена, такие как "Misère".

Когда я делаю:

urllib2.quote(name)

Я получаю сообщение об ошибке:

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'

Что я делаю не так?

Ответы [ 2 ]

12 голосов
/ 07 февраля 2011

Попробуйте:

urllib2.quote(s.encode('utf8'))
0 голосов
/ 05 июня 2015

Небольшим улучшением ответа @ would будет включение безопасных символов в вызов метода. По умолчанию urllib2.quote () включает в себя только / _ - . как безопасный символ, который означает, что такие символы, как :, будут преобразованы, что делает URL-адрес бесполезным.

Например:

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

Обратите внимание на небольшую разницу в выходных данных в части https URL.

Надеюсь, это сэкономит кому-то еще время, которое понадобилось мне, чтобы понять это!

...