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

对于写python的人来说,这个异常一点不陌生,只要涉及到中文字符串的操作,一不小心就会出错。关于这个问题的解释,找到一篇好文,分享一下。

原文地址:https://blog.csdn.net/u011350541/article/details/78683682

在解决错误之前,首先要了解unicode和utf-8的区别。

unicode指的是万国码,是一种“字码表”。而utf-8是这种字码表储存的编码方法。unicode不一定要由utf-8这种方式编成bytecode储存,也可以使用utf-16,utf-7等其他方式。目前大多都以utf-8的方式来变成bytecode。

其次,Python中字符串类型分为byte string 和 unicode string两种。

如果在python文件中指定编码方式为utf-8(#coding=utf-8),那么所有带中文的字符串都会被认为是utf-8编码的byte string(例如:mystr=”你好”),但是在函数中所产生的字符串则被认为是unicode string。

问题就出在这边,unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就会产生这样的错误。例如:

self.response.out.write(“你好”+self.request.get(“argu”))

其中,”你好”被认为是byte string,而self.request.get(“argu”)的返回值被认为是unicode string。由于预设的解码器是ascii,所以就不能识别中文byte string。然后就报错了。

以下有两个解决方法:

#1.将字符串全都转成byte string。
self.response.out.write("你好"+self.request.get("argu").encode("utf-8"))
#2.将字符串全都转成unicode string。
self.response.out.write(u"你好"+self.request.get("argu"))
#byte string转换成unicode string可以这样转unicode(unicodestring, "utf-8")

最后再补充点,出现报错后,将byte string转化为Unicode string的方法

apply_content = unicode(dict[‘apply_content’], ‘utf-8’)

直接将str变成unicode

另外可以用type(string)检查字符串的类型是Unicode还是str类型

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

原文地址:https://www.cnblogs.com/wangzhisdu/p/9013221.html

时间: 2024-10-30 16:29:52

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128)的相关文章

【Python】【解决】UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128)

我是转的 http://www.cnblogs.com/QuLory/p/3615584.html 刚用flask写了个小小的程序 程序能跑起来 可是就是访问网页的时候却报标题的错误 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 1: ordinal not in range(128) Unicode的编码问题,读取文件时使用的编码默认是ascii而不是utf8,所以报错 在代码中加上几句即可: impo

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

kilo版,horizon界面用中文,删除时报错."UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)" 出错原因就是python的str默认是ascii编码,和unicode编码冲突,就会报这个标题错误.那么该怎样解决呢? 解决方法如下: vim /usr/lib/python2.7/site-packages/horizon/tables/

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

问题分析:错误提示中的“ordinal not in range(128)”,意思是,字符不在128范围内,即说明不是普通的ASCII字符,超出处理能力了. import sys print u'系统默认编码为',sys.getdefaultencoding() default_encoding = 'utf-8' #重新设置编码方式为uft-8 if sys.getdefaultencoding() != default_encoding: reload(sys) sys.setdefault

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

我用的方法: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 4: ordinal not in range(128)    如果出现编码问题:类似错误如下UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 4: ordinal not in range(128),这是由于python2中的编码bug,需要在python目

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

今天做网页到了测试和数据库交互的地方,其中HTML和数据库都是设置成utf-8格式编码,插入到数据库中是正确的,但是当读取出来的时候就会出错,原因就是python的str默认是ascii编码,和unicode编码冲突,就会报这个标题错误.那么该怎样解决呢? 通过搜集网上的资料,自己多次尝试,问题算是解决了,在代码中加上如下几句即可. import sys reload(sys) sys.setdefaultencoding('utf8')

[Python] 运行Flask, 报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: ordinal not in range(128)

运行时报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: ordinal not in range(128) Python2.7在Windows上一个bug!!! 解决方法: 参考官方patch: http://bugs.python.org/file19332/9291a.patch 如下代码:一,加入from itertools import count: 二,修改 def enum_type

解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 7: ordinal not in range(128)

在Windows下同时装了Python2和Python3,但是在使用命令给pip更新的时候,出现了以下错误: 解决办法:修改mimetypes.py文件,路径位于python的安装路径下的Lib\mimetypes.py文件.在import下添加如下几行,将编码设置为'gbk': 1 if sys.getdefaultencoding() != 'gbk': 2 reload(sys) 3 sys.setdefaultencoding('gbk') 成功解决,如图: 解决UnicodeDecod

cocos2d-x-3.0beta2创建项目遇到“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9: ordinal not in range(128)”的问题

在Windows平台下 用cocos2d-x-3.0beta2版本下的create_project.py工具创建项目 但是遇到如下问题:UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9: ordinal not in range(128) 经过查阅资料,原来是文件夹是中文名造成的,所有涉及cocos2d-x的文件夹的文件名都应该是英文的!应该全部英文目录,不能使用中文路径 cocos2d-x-3.0bet

python安装程序是报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)

python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128) 有2种方法设置python的默认编码: 方法一: 在程序中加入以下代码: import sys reload(sys) sys.setdefaultencoding('utf8') 方法二: