使用Python 3进行URL解码

84

有没有一种方法可以在Python 3中对字符串进行URL解码

像这样取出东西:

id%253D184ff84d27c3613d%26quality%3Dmedium

解码两次以获取

id=184ff84d27c3613d&quality=medium
2个回答

124

只需使用urllib.parse.unquote()

>>> import urllib.parse
>>> urllib.parse.unquote('id%253D184ff84d27c3613d%26quality%3Dmedium')
'id%3D184ff84d27c3613d&quality=medium'
>>> urllib.parse.unquote('id%3D184ff84d27c3613d&quality=medium')
id=184ff84d27c3613d&quality=medium

1
我得到了 AttributeError: 'module' object has no attribute 'parse' 的错误,相反我必须直接使用 urllib.unquote() - neydroydrec
8
@Benjamin:你正在使用Python2,这是针对Python3的。 - Blender
1
我不知道为什么需要运行两次,@Blender能解释一下吗? - Santosh Kumar
1
@Blender 这应该是 import urllib.parse - jamylak
3
我想知道为什么他们使用“引号”/“取消引号”而不是“编码”/“解码”:/ - daveoncode
你如何将这个转换成类似于 {id:253D184ff84d27c3613d,quality:medium} 的字典? - Raymond

18

试试这个:

from urllib.parse import unquote
s = 'id%253D184ff84d27c3613d%26quality%3Dmedium'
unquote(unquote(s))

它将返回:

> 'id=184ff84d27c3613d&quality=medium'

2
Python3将urlliburllib2整合成一个名为urllib的模块,并拆分为不同的子模块。这对于Python2也适用。 - Blender
谢谢您指出来,那么在Python3中应该怎样才是正确的呢?from urllib import parse.unquote - Óscar López
3
from urllib.parse import unquote 的意思是“导入urllib库中的unquote函数”。请参考我的翻译。 - Blender
这里有点挑剔,但你需要运行函数两次。URL已经被编码了两次。 - Blender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接