Python 请求编码问题



我使用 python 请求向这个 url 发出 get 请求。这是代码片段。

url = 'http://213.139.159.46/prj-wwvauskunft/projects/gus/daten/index.jsp?'
params = {'id': 2619521210}
response = requests.get(
url,
params=params
)
print(response.status_code)
text = response.text
content = response.content

我在 Python2.7 和 Python3.6 中运行相同的代码

当我比较两个版本之间的文本变量时,它们是不同的。但是两个版本之间的内容是相同的。我很困惑为什么内容相同但文本不同。如果他们使用相同的编码将文本编码到内容,则文本不应该也相同吗?

我使用chardet来检测内容的编码,两个版本都以ISO-8859-1结尾。他们不使用utf-8的可能原因是什么。这只是一种偏好吗?

另外,当我这样做时:

content.replace('span', '')

在 Python2 中,它可以工作。在 Python3 中,它会抛出此错误。TypeError: a bytes-like object is required, not 'str'(使用b'span' 和 b''可以解决问题(

但是当我这样做时:

text.replace('span', '')

两个版本都有效。为什么?

无法保证Python 2Python 3兼容性(既不向后也不向前(。例如,阅读 Python 2 与 Python 3:主要区别。例如,如果您的脚本被修改(在末尾添加以下代码片段(:

print('type(text)   ', type(text))
print('type(content)', type(content))

输出

py -2 D:PythonSO361954902.py
200
('type(text)   ', <type 'unicode'>)
('type(content)', <type 'str'>)
py -3 D:PythonSO361954902.py
200
type(text)    <class 'str'>
type(content) <class 'bytes'>

为了完整起见,脚本如下:

type D:PythonSO361954902.py
import requests
url = 'http://213.139.159.46/prj-wwvauskunft/projects/gus/daten/index.jsp?'
params = {'id': 2619521210}
response = requests.get(
url,
params=params
)
print(response.status_code)
text = response.text
content = response.content
print('type(text)   ', type(text))
print('type(content)', type(content))

最新更新