Python urllib 编码的 url 有一个额外的字符



我正在尝试从python的urllib对此列表进行编码。

>>> from urllib.parse import urlencode, unquote
>>> data_to_encode = {'user_ids': [1, 2, 3]}
>>> encoded_url = urlencode(data_to_encode)
>>> 
>>> encoded_url
'user_ids=%5B1%2C+2%2C+3%5D'
>>>
>>> unqoute(encoded_url)
'user_ids=[1,+2,+3]'

编码正在插入一个带有元素的额外+符号。为什么会发生这种情况以及如何解决此问题,以便编码前和解码后的 url 相同?

发生这种情况是因为 list 的__str__方法返回列表中由", "连接的项目,该项目是一个逗号,后跟一个空格。当您将列表[1,2,3]传递给 urlencode 时,它会隐式调用__str__方法来获取字符串表示形式。

>>> data_to_encode['user_ids'].__str__()
"[1, 2, 3]"
>>> ['apple','orange','pear'].__str__()
"['apple', 'orange', 'pear']"

你可以试试unquote_plus

urllib.parse.unquote_plus(字符串,编码='utf-8',错误='替换') 像 unquote() 一样,但也根据需要用空格替换加号 用于取消引用 HTML 表单值。

相关内容

最新更新