url 編解碼在Python的實現

原文

https://blog.csdn.net/wf592523813/article/details/79141463

URL 需編碼&解碼原因

通常如果一樣東西需要編碼,說明其並不適合直接傳輸。原因多種多樣,如 size 過大,包含隱私數據。對於 url 來說,之所以要進行編碼,是因爲 url 中有些字符會引起歧義。

例如,url 參數字符串中使用 key=value 鍵值對這樣的形式來傳參,鍵值對之間以 & 符號分隔,如 /s?q=abc&ie=utf-8。如果你的value字符串中包含了= 或者 & ,那麼勢必會造成接收 url 的服務器解析錯誤,因此必須將引起歧義的 & 和 = 符號進行轉義,也就是對其進行編碼。

字符串被當作 url 提交時會被自動進行 url 編碼處理,在 python 裏也有個 urllib.urlencode 的方法,可以很方便的把字典形式的參數進行 url編碼。當 url 地址含有中文或者 ‘/’ 的時候,這是就需要用做 urlencode一下編碼轉換。

關於 urlencode 和 quote

urlencode 的參數是詞典,它可以將 key-value 這樣的鍵值對轉換成我們想要的格式,將URL中的鍵值對以連接符 & 劃分。如果你用的是python2.*,urlencode 在 urllib.urlencode。如果使用的是 python3,urlencode在urllib.parse.urlencode。
在這裏插入圖片描述
如果只是相對一個字符串進行 urlencode 轉換,使用 urllib 提供的另外一個函數:quote() : 在這裏插入圖片描述
對 url 進行解碼,把類似 “%xx” 的字符替換成單個字符,當 urlencode之後的字符串傳遞過來之後,接收完畢解碼使用 urllib 提供的unquote() 函數,注意沒有 urldecode()!若 unquote方法接收到的參數類型是 unicode,則返回的值類型也是 unicode,只不過是把 “%” 替換成了 ’\x’,明智的做法是使用 str() 轉換一下再用。
在這裏插入圖片描述
在做解碼的時候,看 unquote() 這個函數的輸出,是對應中文在 gbk 下的編碼,在對比一下 quote() 的結果不難發現,**所謂的解碼就是把字符串轉成 gbk 編碼,然後把 \x 替換成 %。**如果你的終端是 utf8 編碼的,那麼要把結果再轉成 utf8 輸出,否則就亂碼。
可以根據實際情況,自定義或者重寫 urlencode()、urldecode() 等函數。

注意事項

注意:如果是已經獲得了 unicode 類型的字符串,字符串內容是,quote 過的,帶百分號% 的,比如:
%E8%BD%AC%E5%8F%91%E5%BE%AE%E5%8D%9A

而此處,想要獲得對應的中文內容,則需要先去把當前的unicode字符串轉換爲普通的 str

quotedStringStrType= str(quotedStringUnicodeType)

再去通過urllib.unquote去解碼,得到真正的中文內容

urlunquotedOriginalStr = urllib.unquote(quotedStringStrType)

此處的最終解碼得到的字符串是 UTF-8 編碼的。

後記

更新時間: 2020-04-11

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章