urllib.parse.quote 有幂等版本吗?
Is there an idempotent version of urllib.parse.quote?
有 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))
但不确定这是否正确。
问题来自处理已部分编码的网址。
URL-encoding本质上是一个非幂等操作,因为%
符号既是一段需要编码的输入,也是输出编码的一个组成部分(见table here)。这意味着大多数(任何?)URL 编码的字符串将包含将在未来的编码过程中重新编码的字符 (%
)。
换句话说,不可能仅仅通过检查字符串本身就知道给定的字符串是否已经过 URL 编码。这使得编写幂等编码函数变得困难,甚至是不可能的。
根据您的用例,您可能可以使用特定于域的解决方法来模拟幂等性。例如,如果您知道给定 URL 的路径部分已被编码但方案没有,您可以 运行 仅对方案进行编码。
有 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))
但不确定这是否正确。
问题来自处理已部分编码的网址。
URL-encoding本质上是一个非幂等操作,因为%
符号既是一段需要编码的输入,也是输出编码的一个组成部分(见table here)。这意味着大多数(任何?)URL 编码的字符串将包含将在未来的编码过程中重新编码的字符 (%
)。
换句话说,不可能仅仅通过检查字符串本身就知道给定的字符串是否已经过 URL 编码。这使得编写幂等编码函数变得困难,甚至是不可能的。
根据您的用例,您可能可以使用特定于域的解决方法来模拟幂等性。例如,如果您知道给定 URL 的路径部分已被编码但方案没有,您可以 运行 仅对方案进行编码。