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

Jua*_*rez 4 python encoding urllib

是否有幂等版本的 urllib.parse.quote ?这个函数应该满足:

urllib.parse.quote(x) == urllib.parse.quote(urllib.parse.quote(x))
Run Code Online (Sandbox Code Playgroud)

对于足够宽的字符串集x。

如果我在逗号上测试该函数,例如:

x = urllib.parse.quote(",")
y = urllib.parse.quote("x")
Run Code Online (Sandbox Code Playgroud)

然后我明白了x = '%2C',但是y = '%252C'它对于逗号来说不是幂等的。

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

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

问题是由于处理已部分编码的网址而产生的。

Emm*_*ler 6

URL 编码本质上是一种非幂等操作,因为%符号既是需要编码的输入,又是输出编码的组成部分(请参阅此处的表格)。这意味着大多数(任何?)URL 编码字符串将包含%将由未来编码过程重新编码的字符 ( )。

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

根据您的用例,您可能可以使用特定于域的解决方法来模拟幂等性。例如,如果您知道给定 URL 的路径部分已编码,但方案尚未编码,则可以仅对方案运行编码。