'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)——引用

在Django视图函数中经常出现类似于‘ascii‘ codec can‘t decode byte 0xef in position 0: ordinal not in range(128)的错误。

在解决错误之前,首先要了解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")

'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)——引用

时间: 2024-08-22 19:06:08

'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)——引用的相关文章

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

python中包含中文字符串的编码不一致问题. 通过查看编码,发现两种字符串的编码缺失不同. 例子: In [43]: uContent = u'丽江旅游(sz002033)#股票##炒股##财经##理财##投资#推荐包赢股,盈利对半分成,不算本金,群:46251412' In [44]: uContentOut[44]: u'\u4e3d\u6c5f\u65c5\u6e38(sz002033)#\u80a1\u7968##\u7092\u80a1##\u8d22\u7ecf##\u7406\u

解决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/

【Error】Python:ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128)

最近编写Python程序时经常遇见中文相关的问题,这里说一个问题的解决方法. 我在使用json模块的dumps()函数时,因为涉及到中文,报出如下错误: ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 这是编码相关的问题,在该程序中加入如下代码: import sys reload(sys) sys.setdefaultencoding('utf-8') 这样就可以解决该问题了,希望对大家有所帮

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

【随笔记录】python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法

python xml处理中文时出现的错误,记录一下,以免忘记 "UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决办法,在该python文件的前面加上如下几句,问题得到解决. import sys default_encoding = 'utf-8' if sys.getdefaultencoding() != default_enco

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

问题描述:一个在Django框架下使用Python编写的定时更新项目,在一个Linux系统下运行没有问题,在另外一台Linux系统下测试,报如下错误: ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 原因分析:字符问题. 解决办法: 方法(一):在出现问题的页加上如下三行即可: import sysreload(sys)sys.setdefaultencoding('utf-8') 方法(二):

python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法

"UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决办法,在该python文件的前面加上如下几句,问题得到解决 #!/usr/bin/env python # -*- coding:utf8 -*- import sysdefault_encoding = 'utf-8'if sys.getdefaultencoding() != de

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

在用爬虫爬取网络小说的时候出现该问题. 估计是字符格式转换格式的错误. 暂时无法解决,搜索了其他博主的解决方案. 以下两个方案靠谱: <一>适用于全篇 1 import sys 2 default_encoding = 'utf-8' 3 if sys.getdefaultencoding() != default_encoding: 4 reload(sys) 5 sys.setdefaultencoding(default_encoding) <二>适用于单个字符的转换 1 u

Python报错“UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe9 in position 0: ordinal not in range(128)”的解决办法

最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)   1.原因 因为默认情况下,Python采用的是ascii编码方式,如下所示: ?? python -c "import sys; print sys.getdefaultencoding()" ascii ?? 而Python在进行编