]*?>.*?", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re"> Python中的urllib.quote和Go中的url.QueryEscape关系探讨 - 11GX
首页 > Python中的urllib.quote和Go中的url.QueryEscape关系探讨

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

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

更多相关:

  • C语言中操作字符串用C运行时函数:strtok, strcmp, strcpy等等,直接操作内存。在c++引入的字符串操作类std:string ,string类中必有一个私有成员,其是一个char*,用户记录从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存。因为是从堆上分配内存,所以string类在维护这块内存上是格外小心...

  • 思路 大体思路:数据结构选用栈,读到左括号时入栈,读到右括号时判断是否匹配,匹配则左括号出栈,非括号字符则继续往下读 代码 #include #include #include using namespace std;bool is_match_parentheses(co...

  • 方法1: Controller

  • str = Regex.Replace(str, @"]*?>.*?", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re...