如何对字符串中的所有字符进行 urlencode,包括安全字符?

How do I urlencode all the characters in a string, including safe characters?

使用 Python,我如何将字符串的所有字符编码为 URL 编码的字符串?

截至目前,大约 every answer 最终引用了相同的方法,例如 urllib.parse.quote()urllib.parse.urlencode()。虽然这些答案在技术上是有效的(它们遵循在 URLs 中编码特殊字符所需的规范),但我还没有设法找到一个描述如何编码 other/non-special 字符的答案(例如小写或大写字母)。

如何获取字符串并将每个字符编码为 URL 编码的字符串?

This gist 揭示了这个问题的一个非常好的答案。最终的功能代码如下:

def encode_all(string):
    return "".join("%{0:0>2}".format(format(ord(char), "x")) for char in string)

我们来分解一下。

首先要注意的是 return 值是 generator expression (... for char in string) 包装在 str.join 调用 ("".join(...)) 中。这意味着我们将对字符串中的每个字符执行一个操作,然后最终将每个输出的字符串连接在一起(使用空字符串,"")。

string中的每个字符进行的操作是"%{0:0>2}".format(format(ord(char), "x"))。这可以分解为以下内容:

  • ord(char):将每个字符转换为对应的数字
  • format(..., "x"):将数字转换为十六进制值。
  • "%{0:0>2}".format(...):将十六进制值格式化为字符串(带前缀"%")。

当您从概览中查看整个函数时,它将每个字符转换为一个数字,将该数字转换为十六进制,然后将所有十六进制值塞入一个字符串(然后 returned ).