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上的记录:

Python中的urllib.quote和Go中的url.QueryEscape关系探讨_第1张图片

下面是Go的实操记录:

下面是对应的源码

//description: 这里验证了Go中的url.QueryEscape(str)和Python 2中的urllib.quote_plus(str)效果是一样的
//note: python 2直接在命令行中进行验证即可
//date: 2020-07-06

package main

import (
	"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)