python:关于url编码和编码

2024-10-01 09:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)。 请告诉我

谢谢。在


Tags: neta1zipfilequoteaafirunquote
2条回答

我想你是在把多个问题卷积成1。在

首先,你问这个问题的唯一原因是你想去掉文件名尾部的引号,它似乎被引用了两次。在

其次,文件名,即使是双引号,也会导致非utf-8编码的数据,并且不可打印。在

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

最后,你不明白引号和unquote实际上在做什么。在

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

在urllib.quote()将字符串参数中“在URL中不安全”的所有内容替换为百分比编码。表示每一个字符都会引起问题(例如:~[SPACE]等),使用十六进制格式的%BYTES。在

由于[:]在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

答案在documentation on quote method

... Letters, digits, and the characters '_.-' are never quoted. ...

aa1不同,因为a可能没有使用quote()引用,因此引用的字符比需要的字符多。a1仍然是有效的带引号的字符串,但是有些字符没有用引号引起来,因为它们不必这样做。在

相关问题 更多 >