舉例來說,如果我有一個編碼字符串:Python的URL編碼/解碼 - 轉換%逃脫十六進制數字轉換爲字符串
url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pav%C3%A9+cafe&postalCode=5067'
,對名稱參數字符%C3%A9這實際上意味着字符E 。
因此,我想輸出是:
new_url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pavé+cafe&postalCode=5067'
我嘗試了的Python終端上執行以下步驟:
>>> import urllib2
>>> url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pav%C3%A9+cafe&postalCode=5067'
>>> new_url=urllib2.unquote(url).decode('utf8')
>>> print new_url
locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pavé+cafe&postalCode=5067
>>>
然而,當我試圖內的同樣的事情Python腳本並運行爲myscript.py,我得到以下堆棧跟蹤:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 88: ordinal not in range(128)
我使用Python 2.6.6,由於工作原因無法切換到其他版本。
我該如何克服這個錯誤?
任何幫助,非常感謝。提前致謝!
######################################################
編輯
我意識到,我得到上述預期的輸出。
但是,我想將new_url中的參數轉換成字典,如下所示。雖然這樣做,但我無法在我的名字參數中保留特殊字符'é'。
print new_url
params_list = new_url.split("&")
print(params_list)
params_dict={}
for p in params_list:
temp = p.split("=")
params_dict[temp[0]] = temp[1]
print(params_dict)
輸出:
NEW_URL
局部性=諾伍德&地址= 138 +在+遊行&區= SA &國家= AU &名=密釘+網吧& POSTALCODE = 5067
params_list
[u'locality = Norwood',u'address = 138 + The + Parade',u'region = SA',u'country = AU',u'name = Pav \ xe9 + cafe' ,u'postalCode = 5067 ']
params_dict
{u'name':u'Pav \ xe9 +咖啡館 'u'locality ':u'Norwood',u'country':U 'AU',u'region':u'SA',u'address':u'138 + The + Parade',u'postalCode':u'5067'}
基本上...現在這個名字'Pav \ xe9 +咖啡廳'而不是所需的'Pavé'。
如何在params_dict中仍然保留相同的特殊字符?
我無法重現您的錯誤。你確定你在終端和腳本中都使用相同的代碼嗎? –
@machineyearning你是對的。請檢查我的編輯是否存在我的實際問題。 – activelearner