如何在 Python 中对 URL 参数进行百分比编码?

新手上路,请多包涵

如果我做

url = "http://example.com?p=" + urllib.quote(query)

  1. 它不会将 / 编码为 %2F (破坏 OAuth 规范化)
  2. 它不处理 Unicode(它会引发异常)

有更好的图书馆吗?

原文由 Paul Tarjan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 754
1 个回答

蟒蛇2

文档中

 urllib.quote(string[, safe])

使用 %xx 转义符替换字符串中的特殊字符。从不引用字母、数字和字符“_.-”。默认情况下,此函数用于引用 URL 的路径部分。可选的安全参数指定不应引用的附加字符 - 它的默认值为 ‘/’

这意味着通过 '' 安全 将解决您的第一个问题:

 >>> urllib.quote('/test')
'/test'
>>> urllib.quote('/test', safe='')
'%2Ftest'

关于第二个问题,有 一个关于它的错误报告。显然它已在 Python 3 中修复。您可以通过编码为 UTF-8 来解决它,如下所示:

 >>> query = urllib.quote(u"Müller".encode('utf8'))
>>> print urllib.unquote(query).decode('utf8')
Müller

顺便说一下,看看 urlencode

蟒蛇 3

在 Python 3 中,函数 quote 已移至 urllib.parse

 >>> import urllib.parse
>>> print(urllib.parse.quote("Müller".encode('utf8')))
M%C3%BCller
>>> print(urllib.parse.unquote("M%C3%BCller"))
Müller

原文由 Nadia Alramli 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题