2014-07-22 48 views
0

我正在嘗試編寫地理編碼腳本。有一個丹麥語(官方和免費)的網絡服務,我在URL中輸入地址,並獲取包含所有必需信息的json文件。使用Python進行編碼 - 將非英文字符轉換爲URL

我找不到正確的方式來翻譯我的丹麥字符(æ,ø,å),當他們進入一個URL。 在這個例子中,我包含了兩個不同的網址(包含地址信息)。 其中一條街道是'Byvej',效果很好,我得到了我期望在IDLE中打印的結果。 (我也可以獲得經緯度)。

另一方面,街道是'Bispegårdsvej'沒有提供任何空閒。返回的列表是空的。 該網址在瀏覽器中正常工作,我知道,我需要添加一些東西到腳本中,我找不到任何有效的東西。

我使用的ActivePython 2.7.2.5 感謝, 湯米

# -*- coding: cp1252 -*- 
import urllib2 
import json 


#url='http://geo.oiorest.dk/adresser.json?postnr=4682&vejnavn=Byvej&husnr=31' 
url='http://geo.oiorest.dk/adresser.json?postnr=4320&vejnavn=Bispegårdsvej&husnr=2' 

try: 
    data = urllib2.urlopen(url).read() 
    adresser = json.loads(data) 

    for adresse in adresser: 
     print "%s %s, %s %s" % \ 
      (adresse['vejnavn']['navn'], 
      adresse['husnr'], 
      adresse['postnummer']['nr'], 
      adresse['postnummer']['navn']) 

except urllib2.HTTPError, e: 
    print "HTTP error: %d" % e.code 
except urllib2.URLError, e: 
    print "Network error: %s" % e.reason.args[1]  

回答

0

您必須正確編碼特殊字符,例如, urlencode作用:

In[16]: urllib.urlencode([('postnr',4320),('vejnavn', 'Bispegårdsvej'), ('husnr',2)]) 
Out[16]: 'postnr=4320&vejnavn=Bispeg%C3%A5rdsvej&husnr=2' 

如果再在前面加上基本URL這個字符串,這應該工作(我至少嘗試了在瀏覽器中)。

如果您打算獲得第三方套餐,requests將是一個熱門選擇。 這將簡化爲:

import requests 
response = requests.get('http://geo.oiorest.dk/adresser.json', 
         params = dict(postnr=4320, 
             vejnavn='Bispegårdsvej', 
             husnr=2)) 
0

您需要百分號編碼,也稱爲URL編碼編碼的社會特徵。百分號編碼之後,URL應該像這樣的:即在RFC 3987將使用UTF-8字符規範化後的編碼定義的IRI到URI的映射符合

http://geo.oiorest.dk/adresser.json?postnr=4320&vejnavn=Bispeg%C3%A5rdsvej&husnr=2 

Web服務,但你應該需要檢查記錄服務以確定要使用的編碼。

Python在標準庫中具有urllib.quote(),用於從標準庫中的字符串和urllib.urlencode()中進行百分比編碼,以從字典或兩個元素的迭代中進行百分比編碼以產生字符串爲查詢參數。

相關問題