url 編譯碼在Python的實現

2021-10-23 05:53:34 字數 1635 閱讀 2972

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

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

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

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 編碼的。

url的編譯碼

好常時間沒有寫部落格了,今天就再寫乙個新學的知識吧。關於url的編譯碼。url解碼 string chinesecode decodeuri string sin else if sin ix else sout char ch return sout url編碼 string chinesecod...

Python進行URL解碼

python進行url解碼 import urllib rawurl url urllib.unquote rawurl 所用模組 urllib 所用函式 urllib.unquote 案例 import urllib rawurl e6 b2 b3 e6 ba 90 url urllib.unqu...

Python 編譯碼 初探

編碼是為了相容字符集之間的通用性,通常可以編碼的地方有 1 系統預設編碼 2 程式執行環境的編碼 3 原始碼檔案自身的編碼 4 程式中的字串編碼 對於python也是一樣的 通常中文作業系統的編碼都是gbk python執行環境預設的編碼是ascii 原始檔的編碼可以自己確定 coding gbk ...