繁体   English   中英

Python 请求编码问题

[英]Python requests encoding issues

我使用 python 请求向此url发出获取请求。 这是代码片段。

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))

Output

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

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

type D:\Python\SO3\61954902.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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM