使用 urllib.parse.urlencode().encode('utf-8')报错的问题
import urllib.parsedata = {
'i': content,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
# 时间戳1970秒
'salt':salt,
# 加密
'sign': sign,
# 时间戳
'lts': lts,
# 加密的数据
'bv': 'f0819a82107e6150005e75ef5fddcc3b',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}
当执行代码的时候:
>>>data = urllib.parse.urlencode(data)
>>>print(data)
>>>i=q%21&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=1732373450894&sign=94d4ca6e41189939dabf53bba271d0f8<s=173237345089&bv=f0819a82107e6150005e75ef5fddcc3b&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTlME
>>>type(data)
>>><class 'str'>
//执行如下程序时, 报错误,请问时什么原因呢?谢谢
>>>data = urllib.parse.urlencode(data).encode('utf-8')
Traceback (most recent call last):
File "D:\program\Python\Python312\Lib\urllib\parse.py", line 984, in urlencode
raise TypeError
TypeError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
data = urllib.parse.urlencode(data).encode('utf-8')
File "D:\program\Python\Python312\Lib\urllib\parse.py", line 990, in urlencode
raise TypeError("not a valid non-string sequence "
TypeError: not a valid non-string sequence or mapping object 在使用 `urllib.parse.urlencode()` 时遇到的错误通常与传递给 `urlencode` 的数据不符合正确的格式有关。根据您提供的代码和错误信息,可以看到您在将 `data` 字典编码为 URL 查询字符串后,又试图对结果进行 `.encode('utf-8')` 操作。这导致了 TypeError,因为 `urlencode` 返回的是一个字符串,字符串对象上没有再进行 `.encode('utf-8')` 的必要。
下面是您的问题解答:
1. `urllib.parse.urlencode(data)` 返回的已经是一个字符串,代表编码后的 URL 查询字符串。
2. `str.encode('utf-8')` 通常用于将字符串转换为字节对象。如果需要字节对象,可以在代码中调整顺序:首先用 `urlencode` 编码为字符串,然后再编码为字节。
正确的步骤应该是:
data_string = urllib.parse.urlencode(data) # 先将字典编码成查询字符串
data_bytes = data_string.encode('utf-8') # 然后将字符串编码为字节对象
根据以上说明,问题可以通过使用 `data_bytes` 来处理字节版本的编码数据。这种转换顺序在用于 HTTP 请求时(例如,POST 请求的请求体数据)是很常见的。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]