0x00 问题引出:

最近在做一个买房自动化分析Python脚本,需要爬取网页。

在使用urllib获取reqest的response的时候,还要进行解码。

见语句:

result = res.decode('utf-8')

当执行该语句的时候,会造成异常:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 103339: invalid continuation byte

0x01 问题分析

该情况是由于出现了无法进行转换的二进制数据造成的,可以写一个小的脚本来判断下,是整体的字符集参数选择上出现了问题,还是出现了部分的无法转换的二进制块:

#python3
#以读入文件为例:
f = open("data.txt", "rb") #二进制格式读文件
while True:line = f.readline()if not line:breakelse:try:# print(line.decode('utf8'))line.decode('utf8')# 为了暴露出错误,最好此处不printexcept:print(str(line))

手写了一段代码,可以通过这段代码的输出来判断哪里出现了问题。

1.如果输出的代码都是hex形式的,可能就是你选择的解码字符集出现了错误。对于python2.7 版本的来说,网上有使用这样一种看上去很霸气,其实很low的方式,来处理:

#coding=utf8
import sys
reload(sys)
sys.setdefaultxxxx("utf8")

其实,这可以看做是python2系列版本的小bug,需要自行重新设置一下默认的编码字符集,如果还要这么设置的话,decode()的参数还拿来干嘛。

所以,在python3版本中,就已经取消了这个方法。

2.如果是字符集出现错误,建议多选择几种字符集测试一下:选择的经验是:如果是爬取到的网页文件,可以查看网页文件的meta标签下的charset属性值。

例如:

<meta charset="UTF-8">

也可以使用notepad++打开,查看右下角的部位,会指示该文件时哪种编码。

3.有的情况,是这样的,整个文件是好的,如果用notepad++打开后,能够看到文件是可以打开的,似乎什么问题都没有发生过,但是,用python进行解码的时候,却会出现错误。

我们运行上面的测试脚本,可以看到出现这样的情况:

<li id="J_menuHistory" data-page="J_pageHistory">

<a><i class="icon-history"></i>播放历史    \0xe5</a>

当然,这段代码是我随手写的一个例子,这里,可以注意看到这个0xe5,这是无法转换出来的部分,这是不属于编码字符集中的部分。所以,在进行编码转换的时候,会报错。

0x03 解决方法

1.修改字符集参数,一般这种情况出现得较多是在国标码(GBK)和utf8之间选择出现了问题。

2.出现异常报错是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,因为默认就是这个参数,将其更改为ignore等即可。例如:

line.decode("utf8", "ignore")

Python3解决UnicodeDecodeError:'utf-8' codec can't decode byte..问题终极解决方案相关推荐

  1. 报错:UnicodeDecodeError:: ‘utf-8‘ codec can‘t decode byte 0xc8 in position 0: invalid contin

    python读取数据时出现:UnicodeDecodeError:: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid conti ...

  2. blender导入c4d obj模型出现UnicodeDecodeError:: ‘utf-8‘ codec can‘t decode byte 0xc8 in position 0:

    错误描述 blender导入c4d obj模型出现UnicodeDecodeError:: 'utf-8' codec can't decode byte 0xc8 in position 0 bal ...

  3. (已解决)pycharm调试报错-UnicodeDecodeError:‘utf-8‘ codec can‘t decode byte 0xe8 in position 1023

    背景 使用pycharm在调试项目的时候,出现文章标题的错误. r = r.decode('utf-8')UnicodeDecodeError: 'utf-8' codec can't decode ...

  4. python 读取数据出现UnicodeDecodeError:: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid contin

    之前写程序时也出现过类似错误,每次解决了到第二次遇见又忘了具体方法,这次记录一下. 一.字符编码问题 先介绍一下字符编码问题 1.ASCLL与GB2312 由于计算机是美国人发明的,因此,最早只有12 ...

  5. python 读取数据出现UnicodeDecodeError:: ‘utf-8‘ codec can‘t decode byte 0xc8 in position 0: invalid contin

    解决方法: 读取时也可以用二进制模式打开的文件(包括模式参数中的'rb')将内容作为字节对象,而不进行任何解码. 然后使用line.decode('utf-8',errors = 'ignore')解 ...

  6. 成功解决Python3版UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0x90 in position 614: ordinal not in

    成功解决Python3版UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in ...

  7. 解决python3 UnicodeDecodeError: 'gbk' codec can't decode byte

    本来想写个html来玩玩,结果读取文件得时候就BUG了.... 以下代码读取html中无中文没有问题. def handle_request(client):buf = client.recv(102 ...

  8. 解决Python报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte

    解决Python报错–UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte ...

  9. 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(12

    方案一: 今天做网页到了测试和数据库交互的地方,其中HTML和数据库都是设置成utf-8格式编码,插入到数据库中是正确的,但是当读取出来的时候就会出错,原因就是Python的str默认是ascii编码 ...

最新文章

  1. GNU make manual 翻译(六十九)
  2. ZBrush关于遮罩的一些操作
  3. MFC中的MainFrame Dlg,App,Doc,View的关系
  4. Opencv--Mat图像基本操作
  5. c语言实验交换字母,C语言实验内容.doc
  6. R语言机器学习中数据可视化的杀手锏
  7. wso2 ei 6.4.0安装笔记
  8. js 直接打开选择文件窗口_打开CAD文件时,怎么快速选择“gbcbig.shx”字体?
  9. Pandas 多个工作表、工作簿
  10. 计算机毕业生毕业论文写作及选题方向
  11. WIN10解包分区和磁盘分区教程
  12. python pyqt5 股票分时_pythonpyqt5股票分时:股票风险与提示_XAC配资之家
  13. 安卓 11 非网络以太网切换动态和静态IP无法连接问题
  14. [Mac]开启鼠标键
  15. echo回音消除方案
  16. Python获取中国疫情数据(最新版)
  17. 《jdk8u源码分析》6.1.GetJREPath
  18. linux grep 去重_GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 - NTP校时服务器...
  19. 基于Flink打造实时计算平台为企业赋能
  20. Docker-compose与consul

热门文章

  1. 负载均衡和CDN技术
  2. JavaJDK中的命令行工具
  3. 03.德国博士练习_02_admin_cluster
  4. 剑指 Offer 27. 二叉树的镜像【无取巧解法,易于理解!】
  5. id int primary key auto_increment是什么意思
  6. 【解题报告+感想感言】2019年第十届蓝桥杯【C++省赛B组】【第五题:迷宫】
  7. 后台服务出现明显“变慢”,谈谈你的诊断思路?
  8. python在文本添加超链接_Python将超链接文本打印到Spyder控制台(Python print hyperlinked text to Spyder Console)...
  9. pid matlab 温度控制,基于MatlabPID温控系统设计与仿真.doc
  10. 贵州轻工职业技术学院计算机分数,贵州轻工职业技术学院历年分数线 2021贵州轻工职业技术学院录取分数线...