python - 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 2
和Python 3
兼容性(既不向后也不向前)。阅读例如Python 2 vs Python 3: Key Differences。例如,如果您的脚本已修改(在末尾添加以下代码段):
print('type(text) ', type(text))
print('type(content)', type(content))
输出:
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))
推荐阅读
- docker - 未创建 Jenkins 文件夹,但 Jenkins 工作正常
- angular - 主机和 iframe 应用程序之间的通信
- sql - 最新版本数据的 SQL 查询
- python - 如何找到大于某个余弦距离值的值对?
- ruby-on-rails - Rails:路线不匹配
- phpunit - pecl install xdebug 在 mac 上无法识别 os php 版本
- php - 是否有一种简单的方法可以在 PHP 7 中为 CRUD 目的缓存数据库结果?
- sql-server - SQL Server Word Breaker 版本之间的差异(全文搜索)
- python - 试图让命令行参数与我的代码一起使用但出现错误 - TypeError: 'NoneType' object is not callable
- ios - 防止 AVPlayerController 劫持 MPRemoteCommandCenter