2013-03-28 4 views
3

Я пытаюсь получить доступ к URL с акцентом, но это не сработало:Python3 с URLLIB и акцентом

#!/usr/bin/python3.3 
# -*- coding: utf-8 -*- 

import urllib.request 

response = urllib.request.urlopen("http://nominatim.openstreetmap.org/search.php?city=Lévis&format=json") 
content = response.read() 
print(content) 

Когда я выполняю этот код у меня есть эта ошибка в ответ

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 22: ordinal not in range(128) 

Так Я стараюсь это

response = urllib.request.urlopen("http://nominatim.openstreetmap.org/search.php?city=Lévis&format=json".encode("UTF-8")) 

Но еще ошибка

AttributeError: 'bytes' object has no attribute 'timeout' 

У вас есть идеи, где моя ошибка?

+3

URL [не может содержать произвольный Unicode] (http://en.wikipedia.org/wiki/URL#List_of_allowed_URL_characters). Вам нужно будет избежать обидного персонажа [каким-то образом] (http://docs.python.org/3/library/urllib.parse.html#url-quoting). – Cairnarvon

ответ

5

Вам нужно бежать ваши параметры запроса, как сказал @Cairnarvon:

import urllib.parse 

city = 'Lévis' 
query = "city=%s&format=json" % (urllib.parse.quote(city),) 
response = urllib.request.urlopen("http://nominatim.openstreetmap.org/search.php?" + query) 
+1

ДА = D Большое спасибо =) – Jean

Смежные вопросы