Python中的urllib.quote和Go中的url.QueryEscape关系探讨
工作中多次遇到Python版本的簽名算法,需要用Go版本再實現一遍,這就需要牽扯到Python 2.7中的urllib中的quote,quote_plus和Go中net/url包中的url.QueryEscape的關系。
下面直接給出它們的關系:
urllib.quote_plus(str)等同于url.QueryEscape(str), urllib.quote_plus(str)和urllib.quote(str)的關系如下
rllib.quote(string[, safe])
將string中的特殊字符做轉義,但是字母,數字和'_.-'不會轉義,還有safe默認的'/'也不會轉義, 如果safe為’‘,則'/'也會轉義
比如:quote('/~connolly/') yields '/%7econnolly/'
urllib.quote_plus(string[, safe])
類似quote,但是空格被替換為+號,本身的+和/號都會轉義
Python 對URL的編解碼操作提供了urllib模塊
urlencode 是針對字典的操作,也可以單獨對一個字符串值進行編碼,基于是否把空格替換為加號+的不同行為,是把空格轉換為%20,還是加號+,分別有quote和quote_plus操作。
下面是我的實操記錄,這是在python 2.7上的記錄:
下面是Go的實操記錄:
下面是對應的源碼
//description: 這里驗證了Go中的url.QueryEscape(str)和Python 2中的urllib.quote_plus(str)效果是一樣的
//note: python 2直接在命令行中進行驗證即可
//date: 2020-07-06package mainimport ("fmt""net/url"
)func main() {str := "老王a /+ *"fmt.Println(url.QueryEscape(str))
}
從python和Go的實操對比,可以看出,urllib.quote_plus()和url.QueryEscape()?效果是相同的。
下面是轉義對應符號:
urllib.quote(str,' ')的處理結果:
空格=》%20,*=》%2A,/=》%2F,+=》%2B
urllib.quote_plus(str)的處理結果,這里第二個參數是" "或可省略:
空格=》+,?*=》%2A,/=》%2F,+=》%2B
這兩個函數對空格的處理是不同的。
總結
以上是生活随笔為你收集整理的Python中的urllib.quote和Go中的url.QueryEscape关系探讨的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 7.5 如何升级Git实录
- 下一篇: 在Mac上使用pip3安装python的