我使用 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 2
和Python 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))