2014-10-04 54 views
0

我已經調用了谷歌API函數:UTF-8和中國特色

def get_lat_long(place): 
    place = re.sub('\s','+', str(place), flags=re.UNICODE) 
    url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + place 
    content = urllib2.urlopen(url).read() 

    obj = json.loads(content) 
    results = obj['results'] 

    lat = long = None 
    if len(results) > 0: 
     loc = results[0]['geometry']['location'] 
     lat = float(loc['lat']) 
     long = float(loc['lng']) 

    return [lat, long] 

然而,當我進入師大附中作爲一個參數,我得到的錯誤:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) 

我嘗試過str(place).encode('utf-8'),但我不認爲這是問題。我認爲這是因爲函數無法讀取中文字符,所以它在讀取之前需要先將中文字符轉換爲unicode字符串?這只是一個猜測。

+0

1.哪些Python版本? 2.錯誤發生在哪條線上?你能修整你的例子到那條線嗎? 3. str(place).encode('utf-8')'沒有多大意義,'str'正在自己編碼/解碼 – 2014-10-04 15:32:34

+0

我的Python版本是2.7。和我得到錯誤的線是我張貼的片段的第二行。 – 2014-10-04 15:59:55

+0

「地點」的類型是什麼? 'unicode'? – 2014-10-04 22:45:26

回答

0

假設placeunicode類型的,你需要做的是這樣的:

def get_lat_long(place): 
    place = urllib.quote_plus(place.encode('utf-8')) 
    url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + place