1. 程式人生 > >python中的urlencode與urldecode

python中的urlencode與urldecode

當url地址含有中文,或者引數有中文的時候,這個算是很正常了,但是把這樣的url作為引數傳遞的時候(最常見的callback),需要把一些中文甚至'/'做一下編碼轉換。

一、urlencode

urllib庫裡面有個urlencode函式,可以把key-value這樣的鍵值對轉換成我們想要的格式,返回的是a=1&b=2這樣的字串,比如:

>>>from urllib import urlencode
>>>data = {
...    'a': 'test',
...    'name': '魔獸'
...}
>>>print
urlencode(data) a=test&name=%C4%A7%CA%DE

如果只想對一個字串進行urlencode轉換,怎麼辦?urllib提供另外一個函式:quote()

>>>from urllib import quote
>>>quote('魔獸')
'%C4%A7%CA%DE'

二、urldecode

當urlencode之後的字串傳遞過來之後,接受完畢就要解碼了——urldecode。urllib提供了unquote()這個函式,可沒有urldecode()!

>>>from urllib
import unquote >>>unquote('%C4%A7%CA%DE') '\xc4\xa7\xca\xde' >>>print unquote('%C4%A7%CA%DE') 魔獸

三、討論

在做urldecode的時候,看unquote()這個函式的輸出,是對應中文在gbk下的編碼,在對比一下quote()的結果不難發現,所謂的urlencode就是把字串轉車gbk編碼,然後把\x替換成%。如果你的終端是utf8編碼的,那麼要把結果再轉成utf8輸出,否則就亂碼。

可以根據實際情況,自定義或者重寫urlencode()、urldecode()等函式。