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())------打印出错的原因+代码行+文件(和正常运行的异常信息类似)

 





你可能感兴趣的:(python,unicode,utf-8,python)