Python中的UTF-8 URL解码

2024-05-17 16:15:32 发布

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

我在Python方面已经花了很多时间了。
我怎么能破解这样一个网址:

example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0

对于python 2.7中的这个:example.com?title==правовая+защита

url=urllib.unquote(url.encode("utf8"))正在返回非常难看的内容。

仍然没有解决办法,任何帮助都是值得赞赏的。


Tags: comurl内容titleexample时间utf8urllib
2条回答

如果您使用的是Python 3,那么可以使用^{}

url = """example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0"""

import urllib.parse
urllib.parse.unquote(url)

给出:

'example.com?title=правовая+защита'

数据是用URL引用转义的UTF-8编码字节,因此您希望用^{}解码,它处理从百分比编码数据到UTF-8字节再到文本的透明解码:

from urllib.parse import unquote

url = unquote(url)

演示:

>>> from urllib.parse import unquote
>>> url = 'example.com?title=%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%B2%D0%B0%D1%8F+%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0'
>>> unquote(url)
'example.com?title=правовая+защита'

Python 2的等价项是^{},但这将返回一个bytestring,因此您必须手动解码:

from urllib import unquote

url = unquote(url).decode('utf8')

相关问题 更多 >