背景

自动化测试调用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”根因及解决方法的更多相关文章

  1. 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: ...

  2. 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: ...

  3. 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 ...

  4. python UnicodeDecodeError: 'ascii' codec can't decode byte 0xa6 in position 907: ordinal not in range(128)

    import sysreload(sys)sys.setdefaultencoding('utf-8')

  5. 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 ...

  6. 【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 使 ...

  7. Python HTMLTestRunner生成网页自动化测试报告时中文编码报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6

    1. 由于使用Python Selenium做网页自动化测试时,有截取网页上的中文信息保存到测试结果中,最终出现编码错误如下: File "D:/PycharmProjects/AutoTe ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. filebeat配置不同路径下的log的两种方法

    第一种方法: vim /etc/filebeat/filebeat.yml filebeat.inputs: # Each - is an input. Most options can be set ...

  2. JS中将字符串中每个单词的首字母大写化

    今天看到一个帖子,处理js中字符串每个单词的首字母大写. 原贴地址:关于字符串中每个单词的首字母大写化问题 受到启发,自己跟着改写了几个版本如下,请大家指正. 1.for循环: var a = 'Hi ...

  3. C语言中const和数组

    C语言中const的用法 const:在定义变量时,如果使用关键字const,那就表示限制这个变量值不允许被改变. (1)     修饰变量 const离谁越近,谁的值就不能改变. int const ...

  4. idea打jar包-MapReduce作业提交到hadoop集群执行

    https://blog.csdn.net/jiaotangX/article/details/78661862 https://liushilang.iteye.com/blog/2093173

  5. BestCoder #58 div1

    2015-10-08 19:14:54 总结:赛后补的一场.题目蛮有意思的. A:DFS 思路:搜一下几个环然后判断一下即可. #include <cstdio> #include < ...

  6. mongodb中的_id的ObjectId的生成规则

    MongoDB中存储的文档必须有一个"_id" .这个键值可以是任何类型,默认是ObjectID对象.在一个集合里,每个文档都有一个唯一的“_id”,确保集合里的每个文档都能被唯一 ...

  7. Ubuntu安装samba实现文件夹共享

    因工作需要,准备在Ubuntu服务器上共享文件夹,从Windows和Mac上都可以访问共享文件. 搜了一下,决定通过samba服务实现.安装过程如下: [step1]安装samba服务 sudo ap ...

  8. 使用selenium前学习HTML(3)——元素

    <!-- HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 注释:开始标签常被称为开放标签(opening tag),结束标签常称为闭合标签(clos ...

  9. Linux 日志分析工具(logwatch)安装及使用

    Linux 日志分析工具(logwatch)安装及使用 日志是非常重要的系统文件,管理员每天的重要工作就是分析和查看服务器的日志,判断服务器的健康状态.但是日志管理又是一项非常枯燥的工作,如果需要管理 ...

  10. Datatable To List<Entity>

    public static DataTable ToDataTable<T>(this IEnumerable<T> varlist) { DataTable dtReturn ...