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

请记住,我是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(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

如您所见,您无法确定它是如何编码的,除非您专门设置了它