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