UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in range(12

转载 2013年12月04日 15:17:58

python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式。

查询系统默认编码可以在解释器中输入以下命令:

Python代码    
  1. >>>sys.getdefaultencoding()  

设置默认编码时使用:

Python代码    
  1. >>>sys.setdefaultencoding('utf8')  

 可能会报AttributeError: 'module' object has no attribute 'setdefaultencoding'的错误,执行reload(sys),在执行以上命令就可以顺利通过。

此时在执行sys.getdefaultencoding()就会发现编码已经被设置为utf8的了,但是在解释器里修改的编码只能保证当次有效,在重启解释器后,会发现,编码又被重置为默认的ascii了,那么有没有办法一次性修改程序或系统的默认编码呢。

 

有2种方法设置python的默认编码:

一个解决的方案在程序中加入以下代码:

Python代码    
  1. import sys  
  2. reload(sys)  
  3. sys.setdefaultencoding('utf8')   

 另一个方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:

Python代码    
  1. # encoding=utf8  
  2. import sys  
  3.   
  4. reload(sys)  
  5. sys.setdefaultencoding('utf8')   

此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。

 

另外有一种解决方案是在程序中所有涉及到编码的地方,强制编码为utf8,即添加代码encode("utf8"),这种方法并不推荐使用,因为一旦少写一个地方,将会导致大量的错误报告,我曾经遇到这种情况,错误日志压缩之后尚有70多K,全都是这一个问题,让人有很崩溃的感觉。

'latin-1' codec can't encode character 的解决方案

分析一个字符串,并更新数据库的时候,出现了如下错误: 'latin-1' codec can't encode character u'\u017e' in position 11: ordinal...
  • qq_27231343
  • qq_27231343
  • 2016年08月27日 09:27
  • 3883

python中文问题 'ascii' codec can't encode character u'\u4e00' in position 0: ordinal not in range(128)

在使用nltk中文语料库sinica_treebank时,先要显示中文却显示错误,'ascii' codec can't encode character u'\u4e00' in position ...
  • qq_33394807
  • qq_33394807
  • 2016年03月15日 16:37
  • 2478

UnicodeEncodeError: 'latin-1' codec can't encode characters,python3 中文乱码

最近想搞个自动登录百度贴吧自动发帖的python脚本,无奈水平有限,网上找了个资料,找到下面这位大神的文章。 原文地址:http://www.jb51.net/article/47218.htm。 ...
  • u014744494
  • u014744494
  • 2014年12月17日 20:25
  • 10992

python3 pymysql 'latin-1' codec can't encode character 错误 问题解决

完整代码: #coding: utf-8 import pymysql # 打开数据库连接 db = pymysql.connect("localhost","root","0...
  • wanglingxxx
  • wanglingxxx
  • 2016年07月27日 20:44
  • 3832

'ascii' codec can't encode character u'\u9ed1' in position 0: ordinal not in...

Python代码运行的时候出现'ascii' codec can't encode character u'\u9ed1' in position 0: ordinal not in...错误; 原...
  • zt_fucker
  • zt_fucker
  • 2015年10月22日 13:05
  • 1268

pandas使用read_sql遇到的编码问题('latin-1' codec can't encode characters in position 12-15: ordinal not in r)

'latin-1' codec can't encode characters in position 12-15: ordinal not in range(256)
  • sjtuldl
  • sjtuldl
  • 2017年01月05日 17:34
  • 5202

python 编码问题:'ascii' codec can't encode characters in position 的解决方案

报错: 'ascii' codec can't encode characters in position 8-50: ordinal not in range(128) python在安装时,默...
  • oLanLanXiaRi
  • oLanLanXiaRi
  • 2015年09月04日 00:40
  • 41535

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

先说解决方法: import sys reload(sys) sys.setdefaultencoding('utf-8') 即在代码文件开始先导入sys包,然后在代码里调用修改默认编码方式的方法s...
  • xyw_Eliot
  • xyw_Eliot
  • 2014年01月13日 09:54
  • 9284

Pip 安装 出现UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in

Python Pip Unicode
  • a542551042
  • a542551042
  • 2015年09月23日 09:56
  • 4038

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)

#coding:utf-8 print raw_input(u'请输入数字:') 保存为文件while.py,并执行 执行结果如下图所示: 解决办法: 在你python的安装目录下的L...
  • zm2714
  • zm2714
  • 2012年10月15日 12:02
  • 7276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in range(12
举报原因:
原因补充:

(最多只允许输入30个字)