python编码问题之"encode"&"decode"
时间:2022-04-23
本文章向大家介绍python编码问题之"encode"&"decode",主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python
encode
decode
编码
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。
当我们想获取网页源代码,并且希望能够以html后缀或者其他格式保存文件的时候,如果不进行编码,那么保存得到的文件在遇到中文时就会出现异常,不便于我们对数据的处理。
- requests
首先说一下使用requests请求得到源代码的处理办法。 经过我无数次的实践,发现通过get请求得到的源代码都是“byte”类型,所以每当想都过write写入到文件中时总是会报错。如下:
#coding=utf-8
import requests
r = requests.get('http://www.baidu.com')
print(type(r.text))
with open('baidu.html','w') as f:
f.write(r.text)
输出结果
>>>
<class 'str'>
Traceback (most recent call last):
File "C:Users14356_000Desktoptest.py", line 8, in <module>
f.write(r.text)
UnicodeEncodeError: 'gbk' codec can't encode character 'xbb' in position 25364: illegal multibyte sequence
解决办法:示例代码如下
import requests
import chardet
r = requests.get('http://www.baidu.com')
content = r.text
print(type(content))
print(chardet.detect(content.encode('utf-8')))
with open('baidu.html','w',encoding='utf-8') as f:
f.write(content.encode('utf-8').decode('utf-8'))
注意chardet是用来查看文字编码类型的,之前想使用下面代码直接查看content的编码类型,但是报错。
...
...
print(chardet.detect(content))
>>>
Traceback (most recent call last):
File "C:Users14356_000Desktoptest.py", line 8, in <module>
print(chardet.detect(content))
File "C:Python35libsite-packageschardet__init__.py", line 25, in detect
raise ValueError('Expected a bytes object, not a unicode object')
ValueError: Expected a bytes object, not a unicode object
因此需要先通过encode,将content的编码格式转化为utf-8才能查看。。这里还没弄清楚为什么Expected a bytes object, not a unicode object,先放着。 下面说说写入操作。写入操作之前需要制定encoding的方式为utf-8,另外f.write()时还得先把content的编码格式设置成utf-8,然后再通过decode解码,将utf-8格式解码成Unicode格式,即python内置的编码格式,这样就能正常写入了,而且中文正常显示!!! 下面是最上面代码的输出结果。
>>>
<class 'str'>
{'encoding': 'utf-8', 'confidence': 0.99}
[Finished in 2.3s]
urllib
先写到这~~~
- 使用CTE解决复杂查询的问题
- WinDbg调试.NET程序入门
- Release编译模式下,事件是否会引起内存泄漏问题初步研究 疑问:
- 10种简单的Java性能优化学习
- 巧用枚举类型,实现项目的多语言切换
- 影响Java调用性能有哪些因素
- 如何为可扩展系统进行Java Socket编程
- 如何使用Windows卷影拷贝服务恢复文件和文件夹
- .net字符串数组查找方式效率比较
- 使用Ring Buffer构建高性能的文件写入程序
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
- PDF.NET数据开发框架实体类操作实例
- 利用Burp Suite对OWASP Juice Shop进行渗透测试
- Java同步问题面试知识学习
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring boot 启动提示数据源错误
- leetcode树之从上到下打印二叉树
- 整理C/C++的可变参数
- ThingJS结合Web地图API开发,让数据展示更加出色!
- 如何分析交易记录?
- [技术创作101训练营]小程序云开发实战:从零搭建科技爱好者周刊小程序
- 【技术创作101训练营】innerHTML插入运行js字符串问题探究
- 组合体惯量法A: matlab程序—机械臂动力学建模
- vue+echarts 实现两个小例子
- 2020CV秋招求职的若干思考
- 快速学习-ElasticJob高可用
- 快速学习-Elastic调度部署
- 快速学习-ElasticJob应用API
- 快速学习-ElasticJob-Lite Quick Start
- 快速学习-ElasticJob-Cloud Quick Start