[大發評論,因爲意見不能被格式化以及]
繼@Boaz的Yaniv的指令工作對我來說:
>>> addressString = 'Wilhelmstra\xc3\x9fe 123, T\xc3\xbcbingen, Deutschland'
這是一個str
ojbject,在UTF-8編碼。我們需要百分比轉義它,以便它可以在URL中使用。
>>> import urllib
>>> fixed = urllib.quote(addressString)
>>> print repr(fixed)
'Wilhelmstra%C3%9Fe%20123%2C%20T%C3%BCbingen%2C%20Deutschland'
現在,讓我們嘗試一下:
>>> url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + fixed +
"&sensor=false"
>>> guff = urllib.urlopen(url).read()
>>> import json
>>> print repr(json.loads(guff)['results'][0]['formatted_address'])
u'Wilhelmstra\xdfe 123, 72074 T\xfcbingen, Germany'
>>>
如果你有這樣的事情:'Wilhelmstra\xdfe 123, T\xfcbingen, Deutschland'
,這是在LATIN1或CP1252或任何編碼的str
對象。你需要將它解碼爲一個unicode
對象,然後使用UTF-8對其進行編碼,然後百分比轉義。
但是,如果你有(很微妙的差異)u'Wilhelmstra\xdfe 123, T\xfcbingen, Deutschland'
,這是一個unicode
對象,你需要用UTF-8編碼,然後百分號轉義它。
你說的「」「 我仍然得到相同的錯誤信息:異常類型:UnicodeEncodeError異常值:'ascii'編解碼器無法編碼字符u'\ xdf'在位置10:序號不在範圍內(128)請求鏈接 「」」
時,這看起來像你喂unicode
對象一些東西,想要一個str
對象,並嘗試使用(通常默認)ascii
編碼編碼得到它。如果你仍然有這個問題,請顯示你的代碼。將其分解到必要的最小值(正如我上面所做的那樣)。顯示repr(step_by_step_results)。
你需要指定這是python2還是python3,因爲unicode處理在Python3中得到了顯着改進 – ninjagecko 2011-05-09 12:13:09
你是否希望Unicode字符在URL中顯示爲真實字符(即不是百分號序列)?因爲這取決於瀏覽器,而不是Python。大多數現代瀏覽器應將這些序列轉換爲Unicode,但不能在URL中直接使用Unicode - 該標準僅允許使用ASCII。 – 2011-05-09 12:16:42
@ninjagecko:http://docs.djangoproject.com/en/dev/faq/install/#can-i-use-django-with-python-3 – 2011-05-09 12:18:16