Python 请求编码文本和内容之间的差异
请记住,我是python的新手,所以这可能很简单。 我认为Python 请求编码文本和内容之间的差异,python,arrays,python-requests,Python,Arrays,Python Requests,请记住,我是python的新手,所以这可能很简单。 我认为content字段只是二进制数据,而text字段是表示为utf-8字符串的二进制数据。但是当我尝试将文本转换回字节并比较输出时,它返回false response = requests.get("https://some.url.com/14") content = response.content text = response.text TextBytes = bytes(text,'utf-8') print
content
字段只是二进制数据,而text
字段是表示为utf-8字符串的二进制数据。但是当我尝试将文本转换回字节并比较输出时,它返回false
response = requests.get("https://some.url.com/14")
content = response.content
text = response.text
TextBytes = bytes(text,'utf-8')
print(len(TextBytes) == len(content)) # False
print(TextBytes == content) # False
为什么会发生这种情况?一个是字节码,一个是文本 内容是文本中的实际二进制文件。当这是打印它被解码,但准确。例如,当我打印(内容)
>>> print(content)
b'{\n "userId": 1,\n "id": 1,\n "title": "delectus aut autem",\n "completed": false\n}'
注意这里有一个b
。这个b表示下面的打印对象不是字符串,而是二进制。这也会导致转义序列在打印时不起作用,因为它是字节的一部分,而不是文本。例如,如果您正在下载可执行文件,这将非常有用
区别在于text
是实际的文本响应,其行为类似于文本。转义序列起作用,它没有内容所具有的b
>>> print(text)
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
从:
内容:
响应的内容,以字节为单位
正文:
以unicode表示的响应内容
如果Response.encoding为None,则将使用chardet猜测编码
(注意:None
为默认值。)
响应内容的编码完全基于HTTP头来确定,完全遵循RFC 2616。如果您可以利用非HTTP知识更好地猜测编码,那么应该在访问此属性之前适当地设置r.encoding
如您所见,您无法确定它是如何编码的,除非您专门设置了它