是否有urllib.parse.quote的幂等版本?

时间:2019-03-29 22:55:37

标签: python encoding urllib

是否存在幂等的urllib.parse.quote版本?该功能应满足:

urllib.parse.quote(x) == urllib.parse.quote(urllib.parse.quote(x))

表示一组足够广泛的x字符串。

如果我在逗号上测试该功能,例如:

x = urllib.parse.quote(",")
y = urllib.parse.quote("x")

然后我得到x = '%2C'但得到y = '%252C',因此它对于逗号不是幂等的。

如果尚不存在这样的功能,您能描述一个实现吗? 我正在考虑使用:

my_unquote = lambda x: urllib.parse.quote(urllib.parse.unquote(x)) 但不确定这是否正确。

问题来自处理已部分编码的网址。

1 个答案:

答案 0 :(得分:3)

URL编码本质上是非幂等的操作,因为AC_INIT([foo], m4_bregexp(m4_join([|], m4_unquote(m4_include([package.json]))), ["?version"?:\s*"?\s*\([0-9]+\.[0-9]+\.[0-9]+\)\s*"?], [\1])) 符号既是需要编码的输入,也是输出编码的一部分(请参见表here) 。这意味着大多数(任何?)URL编码的字符串都将包含字符(%),这些字符将在以后的编码过程中重新编码。

换句话说,仅通过检查字符串本身就无法知道给定的字符串是否已被URL编码。这使得编写幂等编码函数很困难,甚至可能是不可能的。

根据您的用例,可以使用一些特定于域的变通办法来模拟幂等。例如,如果您知道给定URL的路径部分已编码,但方案未进行编码,则可以仅对方案运行编码。