Python進行URL解碼
import urllib rawurl=xxx url=urllib.unquote(rawurl)
所用模塊:urllib
所用函數:urllib.unquote()
案例
import urllib rawurl = "%E6%B2%B3%E6%BA%90" url = urllib.unquote(rawurl) print url
輸出
河源
問題擴展
urllib.unquote()目的是對url編碼進行解碼,與該函數對應的是編碼函數urllib.quote()
>>> import urllib
>>> urllib.quote(
"河源"
)
'%E
6%
B
2%
B
3%
E
6%
BA%
90
URL為何要編碼、解碼?
通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私數據。對於Url來說,之所以要進行編碼,是因為Url中有些字符會引起歧義。
例如,Url參數字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和=符號進行轉義,也就是對其進行編碼。
又如,Url的編碼格式采用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字符,例如中文。否則如果客戶端瀏覽器和服務端瀏覽器支持的字符集不同的情況下,中文可能會造成問題。
編解碼一般都是針對url參數的,url的其他部分一般人都不會使用非ASCII字符的。
urllib.quote(string[, safe]):對字符串進行編碼。參數safe指定了不需要編碼的字符;
urllib.unquote(string) :對字符串進行解碼;
urllib.quote_plus(string [ , safe ] ) :與urllib.quote類似,但這個方法用'+'來替換' ',而quote用'%20'來代替' '
urllib.unquote_plus(string ) :對字符串進行解碼;
urllib.urlencode(query[, doseq]):將dict或者包含兩個元素的元組列表轉換成url參數。例如 字典{'name': 'dark-bull', 'age': 200}將被轉換"name=dark-bull&age=200"
url參數如何構造?
有兩個方式:
- 人工組合參數字符串
- 使用urllib庫中的urlencode方法來構造
第一個方法這里不在描述,第二個方法是可以安裝如下步驟來進行:
- import urllib
- params = {'usrname':'pan', 'password':'123456'}
- base_url = 'http://www.x.com/login.html'
- url = base_url + '?' +urllib.urlencode(params)
- print url
其中url就是
- http://www.x.com/login.html?password=123456&usrname=pan
params = {'src':'rtmp://10.53.120.72/live/ls_fxzl_jk', 'obj':'rtmp://10.121.33.36/live/decklink__10.1.22.241_9114'}
>>> print urllib.urlencode(params) 對參數進行編碼
src=rtmp%3A%2F%2F10.53.120.72%2Flive%2Fls_fxzl_jk&obj=rtmp%3A%2F%2F10.121.33.36%2Flive%2Fdecklink__10.1.22.241_9114

