python en(de)code
代码写挺长的,也是边学边写,但一直搞不清楚python的encode(编码)和decode(解码)。以下是我的探究之路。
一、当然先看官方文档
里面提到encode函数‘Return an encoded version of the string as a bytes object.’就是将字符串进行编码,返回得到bytes类型对象,
而decode函数正好相反,是将bytes解码为字符串类型。
二、实际操作一下
直接以爬虫代码为例:
1 |
response=requests.get(BASE_DOMAIN, headers=HEADERS) |
run一下之后会发现很多乱码
查了一下发现问题处在.text上,.text是返回网页的相应数据,并按照机器认为的最大可能去解码比如utf-8。而观察本站发现’charset=gb2312’所以出现了乱码。于是,
我用encoding规定用gb2312解码:
1 |
response=requests.get(BASE_DOMAIN, headers=HEADERS) response.encoding="gb2312" |
果然解决了乱码问题,但这和 大专栏 python en(de)codeencode,decode没啥关系。。。
接下来就有关系了。
我换了一种方式:
1 |
response=requests.get(BASE_DOMAIN, headers=HEADERS) |
发现爬到的是bytes类型,意识到.content返回的数据是不进行解码的,又由于是由bytes到字符串的解码,所以使用decode()
1 |
response=requests.get(BASE_DOMAIN, headers=HEADERS) |
一运行,woc!报错了
说是gb2312不能解码,这不矛盾吗…
于是赶紧上网查了一下发现gbk的解码范围包含了gb2312,于是尝试改为gbk,问题解决,成功解码~
这只是用了decode(),那再作死一下把解码的再编码回来,走你:
1 |
response=requests.get(BASE_DOMAIN, headers=HEADERS) |
成功编码~
经过了这次的探索尝试,搞明白了Python编码和解码,最近在学习汇编,相信之后从硬件的角度会对编码解码这方面有更深的理解!
python en(de)code的更多相关文章
- Converting Python Virtual Machine Code to C
Converting Python Virtual Machine Code to C
- Python on VS Code
install python extension Press F1, and input "ext install python". Then the icon at the le ...
- python 调用 C++ code
本文以实例code讲解python 调用 C++的方法. 1. 如果没有参数传递从python传递至C++,python调用C++的最简单方法是将函数声明为C可用函数,然后作为C code被pytho ...
- Pycharm创建Django项目显示python non-zero exit code(1)错误
好久时间没有做Django的项目了,今天创建项目竟然报Non-zero exit code(1)错误 查明原因是因为pip不是最新版本,需要执行以下命令:python -m pip install - ...
- python单线程爬虫code
广度优先算法: # -*- coding: utf-8 -*- import urllib import urllib.request from bs4 import BeautifulSoup im ...
- python shopping incomplete code
#shopping code#shopping.py#导入登录模块import login# shop car beginningsalary = input("请输入工资:\t" ...
- facebook视频上传python 返回错误code:100,'type':OAuthException
首先重新获取访问口令token: https://developers.facebook.com/tools/debug/accesstoken/?q=EAAYDuzyd3eYBAK9lZCErZBl ...
- python参数Sample Code
import time import datetime import getopt import sys try: opts, args = getopt.getopt(sys.argv[1:], & ...
- Python with VS Code
1. 基本的代码结构为: 2.
随机推荐
- 82.常用的返回QuerySet对象的方法使用详解:all,select_related
1. all: 返回这个ORM模型的QuerySet对象. articles = Article.objects.all() print(articles) 2.select_related: 查找数 ...
- Class.forName(String className)解析
功能: Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 一 ...
- codeigniter框架开发技巧
codeigniter框架开发技巧 来源:未知 时间:2014-10-20 11:36 阅读数:171 作者:xbdadmin [导读] (1)自动加载modelsphp5风格 使用这个 ...
- 程序员必备:详解XSS和CSRF
做开发的小伙伴想必都不陌生XSS 和 CSRF,但也有一些刚接触的朋友还不是很清楚,今天就给大家详解下XSS和CSRF! 一.XSS xss,即 Cross Site Script,中翻译是跨站脚本攻 ...
- UML-测试驱动开发
1.什么是测试驱动开发? 测试驱动开发(TDD)是迭代和敏捷XP方法提倡的优秀实践,该实践为测试测试优先开发.不仅包含单元测试. 2.为什么测试驱动开发? 1).最大提升代码稳定性 2).澄清接口和行 ...
- JavaScript学习总结(三)
在学习完了基本的内容之后,我们来学习一下JavaScript中的对象部分以及如何自定义对象的问题. String对象 创建字符串的方式共有两种: 方式1:new String("内容&quo ...
- 1811 06 pygame 的继续开发
早上看了 高数和python 好像系统没有保存 桑心啊 关于游戏背景的制作 游戏背景就是 背景在移动 而主人物还在原位置的 常常用于跑酷游戏类 背景开始绘制两张图像 一张完全 ...
- Linux下常用的3种软件安装方式—rpm、yum、tar
一:Linux源码安装 1.解压源码包文件 源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,分别的解压方式: ...
- python3转义编码
s = 'dy电影' print(s) # dy电影 print(type(s)) # <class 'str'> print(s.encode('utf-8')) # b'dy\xe7\ ...
- Django知识点集合