【Python】“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9”根因及解决方法
背景
自动化测试调用HTMLTestRunner生成测试报告的时候,出现了编码错误,错误如题

原因
搜索了很多资料,得出的结论是python的str默认是ascii编码,和unicode编码冲突,就会报这个错误
解决方法
网上的资料推荐在代码中加上如下几句可以解决这个问题:
1 import sys
2 reload(sys)
3 sys.setdefaultencoding('utf8')
深入
博主在后来又遇到过多次编码错误,最常遇到的就是下面这个:
“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)“
后来学习了unicode和utf-8相关的内容,慢慢的对这一块有了一定的认识:
unicode指的是万国码 是一种"字码表" 而utf-8是这种字码表储存的编码方法,编成bytecode储存,unicode还可以编码utf-16,utf-7等其他方式
Python中字符串类型分为两种型态:byte string、unicode string Python脚本顶部设定了“ #coding=utf-8”后所有带有中文的都会被宣告为utf-8的byte string,但是,在函数中所产生的字符串,又会是unicode string。其实两者都能表示中文,但是不代表能够混用,混用就会出错
例如:
response.out.write("你好"+request.get("argu"))
中文字符“你好”会被宣告为byte string,而request.get()的结果是unicode string
Python会自动常识吧前面的“你好”转为unicode
但是预设的解码器是ascii,所以转换不出来,就报了上面的错误。
一劳永逸的方法
综上所述,一劳永逸的解决的方法有3种
全部转为byte string (response.out.write("你好"+request.get("argu").encode('utf-8')))
全部转为unicode string (response.out.write(u"你好"+request.get("argu")))
更改设定预设解码器为utf-8
P.S.资料库存入和读取以及request拿到的参数预设就都是unicode string,若是要把byte string转unicode string可以这样转unicode(unicodestring,"utf-8")
这样就再也不会有"UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)"的问题产生了 遇到喷出这种错误几乎都可以用这2种方法解决
我个人是觉得用第一种全都转byte string比较好
因为一但用了unicode string 以后有中文字串前面都要挂个u 看起来不是很直觉 而且容易漏掉
不如在遇到函式有中文结果(或是资料库捞出来的结果)直接都encode成utf-8就好
【Python】“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9”根因及解决方法的更多相关文章
- Python报错“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)”的解决办法
最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ...
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128) 解决办法
最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ...
- python2 当中 遇到 UnicodeDecodeError UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 37: ordinal not in range(128)
使用python2 总是遇到 UnicodeDecodeErrorUnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in positio ...
- python UnicodeDecodeError: 'ascii' codec can't decode byte 0xa6 in position 907: ordinal not in range(128)
import sysreload(sys)sys.setdefaultencoding('utf-8')
- python:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xef in position xxx: ordinal not in range(128)
执行sql_cmd = "select * from item_base where item_id in " + item_ids_str时报错 solve: import sy ...
- 【Python】【解决】UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128)
1.问题描述 今天在升级Ubuntu到14.04,使用命令行启动软件更新器,进行版本升级,结果开始升级就异常退出了,具体打印如下: $update-manager -d 正在检查新版 Ubuntu 使 ...
- Python HTMLTestRunner生成网页自动化测试报告时中文编码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6
1. 由于使用Python Selenium做网页自动化测试时,有截取网页上的中文信息保存到测试结果中,最终出现编码错误如下: File "D:/PycharmProjects/AutoTe ...
- python 3以上版本使用pickle.load读取文件报UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6
python 3以上版本使用pickle.load读取文件报UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6 ...
- Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0
先交待下开发环境: 操作系统:Windows 7 Python版本:2.7.9 Pip版本:6.1.1 其他环境忽略 在windows下使用pip下载python包,出现如下错误 Collecting ...
随机推荐
- pendingIntent的FLAG标签:
PendingIntent是一个特殊的Intent,实际上它像一个邮包,其中包裹着真正的Intent,当邮包未打开时,Intent是被“挂起”的,所以并不执行, 只有当邮包拆开时才会执行.它与Inte ...
- phpcms 添加稿件到栏目 add_content
private $db; private $content_model; public function __construct() { parent::__construct (); $this-& ...
- mysql数据库从删库到跑路之mysq索引
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 《mysql必知必会》读书笔记--触发器及管理事务处理
触发器 触发器是MySQL响应DELETE,INSERT,UPDATE而自动执行的一条MySQL语句,其他语句不支持触发器. 创建触发器时,需要4个条件: 唯一的触发器名 触发器关联的表 触发器应该响 ...
- ubuntu 16.4安装卸载apache+php+mysql
1.安装apache sudo apt-get update sudo apt-get install apache2 2.安装php5.6 添加PPA源:add-apt-repository ppa ...
- 带你走进AJAX(1)
ajax是什么? (1)ajax (asynchronouse javascript and xml) 异步的javascript 和xml (2)ajax是一个粘合剂,将javascript.xml ...
- 独立开发一个App是一种怎样的体验?
(本文原文是我在知乎上写的一篇回答:独立开发一个 App 是一种怎样的体验?) UWP业余开发者表示,非常愿意做一股清流.在喧闹无比的iOS和Android平台,为了给应用造势,太多人费尽心思,勾心斗 ...
- Dbus组成和原理
DBUS是实质上一个适用于桌面应用的进程间的通讯机制,即所谓的IPC机制.适合在同一台机器,不适合于INTERNET的IPC机制.DBUS不是一个为所有可能的应用的通用的IPC机制,不支持其他IPC机 ...
- ODP.NET Oracle12.1版本免安装发布(IIS WebServices)
1.ODP.NET必须的DLL OCI.DLL Oracle.DataAccess.dll OraOps12.dll msvcr100.dll oraociei12.dll oraons.dll 2. ...
- 20145314郑凯杰 《Java程序设计》实验二 实验报告
20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...