python编码问题之\"encode\"&\"decode\"

简介: pythonencodedecode编码decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
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写入到文件中时总是会报错。如下:

  1. #coding=utf-8 
  2. import requests 
  3.  
  4. r = requests.get('http://www.baidu.com'
  5.  
  6. print(type(r.text)) 
  7. with open('baidu.html','w'as f: 
  8.     f.write(r.text) 

输出结果

  1. >>> 
  2. <class 'str'> 
  3. Traceback (most recent call last)
  4.   File "C:\Users\14356_000\Desktop\test.py", line 8in <module> 
  5.     f.write(r.text) 
  6. UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 25364: illegal multibyte sequence 

解决办法:示例代码如下

  1.  
  2. import requests 
  3. import chardet 
  4.  
  5. r = requests.get('http://www.baidu.com'
  6. content = r.text 
  7. print(type(content)) 
  8. print(chardet.detect(content.encode('utf-8'))) 
  9. with open('baidu.html','w',encoding='utf-8'as f: 
  10.     f.write(content.encode('utf-8').decode('utf-8')) 

注意chardet是用来查看文字编码类型的,之前想使用下面代码直接查看content的编码类型,但是报错。

  1. ... 
  2. ... 
  3. print(chardet.detect(content)) 
  4.  
  5. >>> 
  6. Traceback (most recent call last): 
  7.   File "C:\Users\14356_000\Desktop\test.py", line 8in <module> 
  8.     print(chardet.detect(content)) 
  9.   File "C:\Python35\lib\site-packages\chardet\__init__.py", line 25in detect 
  10.     raise ValueError('Expected a bytes object, not a unicode object'
  11. 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内置的编码格式,这样就能正常写入了,而且中文正常显示!!!
下面是最上面代码的输出结果。

  1. >>> 
  2. <class 'str'> 
  3. {'encoding': 'utf-8''confidence'0.99
  4. [Finished in 2.3s] 
  • urllib

先写到这~~~

目录
相关文章
|
3月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
157 6
|
3月前
|
Python
Python 中如何指定 open 编码为ANSI
Python 中如何指定 open 编码为ANSI
66 1
|
4月前
|
数据采集 开发工具 Python
海康威视工业相机SDK+Python+PyQt开发数据采集系统(支持软件触发、编码器触发)
该系统基于海康威视工业相机SDK,使用Python与PyQt开发,支持Gige与USB相机设备的搜索及双相机同时显示。系统提供软件触发与编码器触发模式,并可在数据采集过程中实时保存图像。此外,用户可以调节曝光时间和增益,并进行信息输入,这些信息将被保存至配置文件以便下次自动加载。参数调节与实时预览等功能进一步增强了系统的实用性。
299 1
|
4月前
|
开发者 Python
Python编码风格
Python编码风格
33 1
|
5月前
|
Python
11个提升Python列表编码效率的高级技巧
Python中关于列表的一些很酷的技巧
59 1
|
4月前
|
JSON 数据库 开发者
FastAPI入门指南:Python开发者必看——从零基础到精通,掌握FastAPI的全栈式Web开发流程,解锁高效编码的秘密!
【8月更文挑战第31天】在当今的Web开发领域,FastAPI迅速成为开发者的热门选择。本指南带领Python开发者快速入门FastAPI,涵盖环境搭建、基础代码、路径参数、请求体处理、数据库操作及异常处理等内容,帮助你轻松掌握这一高效Web框架。通过实践操作,你将学会构建高性能的Web应用,并为后续复杂项目打下坚实基础。
141 0
|
5月前
|
存储 缓存 Python
python中小数据池和编码
python中小数据池和编码
60 3
|
5月前
|
编解码 开发者 Python
【Python】已解决:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u0157’ in position 1: illegal m
【Python】已解决:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u0157’ in position 1: illegal m
77 1
|
5月前
|
编解码 测试技术 Python
【Python】已解决:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not i
【Python】已解决:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not i
967 1
|
5月前
|
缓存 Java Unix
python中内存管理等10个编码习惯
【7月更文挑战第3天】本文涵盖了Python编程中的变量管理、模块导入、命令行参数、内存管理和面向对象设计的10个关键概念。
51 0
python中内存管理等10个编码习惯