gpt4 book ai didi

python:关于url编码和解码

转载 作者:行者123 更新时间:2023-12-01 06:01:47 25 4
gpt4 key购买 nike

我有一个问题。我正在尝试在 python 中使用 urllib 库。但是,我不明白。

a = 'http%3A%2F%2Ffile%2Efir%2Enet%2F40d55cecf9a3a47851b1d0ebda3e423993c837d3ca%2F20110909%5F52%5Fblogfile%2Folsscj25%5F1315512137967%5F5tAuGI%5Fzip%2F%255B%25C0%25A9%25B5%25B5%25BF%25ECxp%255D%2B%25C0%25A9%25B5%25B5%25BF%25ECxp%2B%25BD%25C3%25B8%25AE%25BE%25F3%25B3%25D1%25B9%25F6%5F%2Ezip'

aa = unquote(unquote(a))
'http://file.fir.net/40d55cecf9a3a47851b1d0ebda3e423993c837d3ca/20110909_52_blogfile/olsscj25_1315512137967_5tAuGI_zip/[\xc0\xa9\xb5\xb5\xbf\xecxp]+\xc0\xa9\xb5\xb5\xbf\xecxp+\xbd\xc3\xb8\xae\xbe\xf3\xb3\xd1\xb9\xf6_.zip'

a1 = quote(quote(aa))
'http%253A//file.fir.net/40d55cecf9a3a47851b1d0ebda3e423993c837d3ca/20110909_52_blogfile/olsscj25_1315512137967_5tAuGI_zip/%255B%25C0%25A9%25B5%25B5%25BF%25ECxp%255D%252B%25C0%25A9%25B5%25B5%25BF%25ECxp%252B%25BD%25C3%25B8%25AE%25BE%25F3%25B3%25D1%25B9%25F6_.zip'

为什么不等于两个值(a 和 a1)。请告诉我

谢谢。

最佳答案

我认为您将多个问题合并为一个问题。

首先,您问这个问题的唯一原因是您想取消引用文件名的尾部部分,该部分似乎被引用了两次。

其次,文件名,即使双引号不加引号,也会产生非 utf-8 编码数据,并且不可打印。

第三,你似乎不理解URL格式。

最后,您不明白引用和取消引用实际上在做什么。

urllib.quote() 和 urllib.unquote() 仅适用于 URL 的 path_info 部分,即 http://file.fir.net/ 之后的所有内容。 .

urllib.quote() 会用百分比编码替换 URL 中不安全的字符串参数中的所有内容。这意味着每个会导致问题的字符(例如::~[SPACE] 等)都采用 %BYTES_IN_HEX 格式。

由于 [:] 在 URL 的路径部分中不安全,quote() 将使用百分比编码对其进行编码。

所有这些意味着您不应该将整个 URL 直接传递到 quote() 中,除非您碰巧想要将 URL 实际编码到 URL 的 path_info 部分中。

解决您的问题的步骤如下:

  1. 修复文件名编码以使用可打印的内容来帮助您调试。
  2. urllib.unquote() 一次以返回正常的 URL。
  3. 当您获得不带引号的 URL 时,首先将其传递给 urlparse.urlparse() 以将组件分解为适当的部分。
  4. urllib.unquote() 文件名部分。
  5. 现在您可以检索原始文件名,您可以继续执行您需要执行的操作。

引用文献:

http://docs.python.org/library/urlparse.html

http://docs.python.org/library/urllib.html

关于python:关于url编码和解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com