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-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

这两个函数对空格的处理是不同的。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值