Python 出现的UnicodeDecodeError的几种情况记录及解决办法

1.python2.7 ide今天写脚本测试网页调用HTMLTestRunner生成测试报告地方,出现了编码错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

原因是python的str默认是ascii编码,和unicode编码冲突,就会报这个标题错误

解决办法(在代码中添加如下几行):

import sys
reload(sys)
sys.setdefaultencoding('utf8')


2.Python3.6 UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 24137: invalid start byte(字节型字符串解码为字符串)

一个可能解决办法(添加忽略错误):decode('utf-8', 'ignore')

3.Python3.6.1 open 打开Excel文件时出现:

UnicodeDecodeError:open(‘xxx.xsl’)(默认读取方式为'r',encoding不管是用utf8、gb2312、gbk编码方式都不行)

解决办法:

改为以二进制的方式读取即可:open('xxx.xsl','rb')

4.python3.6.1 open打开jpg图片调用requests执行上传时出现:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256) 

当时出现的原因是:request请求的自定义头部中包含了中文

解决办法:别用中文。。。。或将自定义头添加的请求参数中文进行转码xxx.encode("utf8")---如果请求使用session,转码方法无效,还是别用中文

ps:

当出现编码问题问题时,python默认的出现信息并没有告诉你具体出错的参数,只是告诉你出错的原因和出错的代码位置,有时候不一定能找到原因(就像在这个问题中我一直以为是请求参数读取图片后编码不正确,一直修改编码方式都不行。。。。最后把自定义头部代码屏蔽了才发现是自定义头的中文导致),为了快速定位问题具体出错的参数,可以将异常信息打印,以便快速找到出错的变量:

try:

except BaseException as e:

print(repr(e))------------打印出错具体的变量
print(str(traceback.format_exc())------打印出错的原因+代码行+文件(和正常运行的异常信息类似)

 





  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值