`

转UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position

 
阅读更多

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,全都是这一个问题,让人有很崩溃的感觉。

分享到:
评论

相关推荐

    解决python写入带有中文的字符到文件错误的问题

    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128) —————————- 经过网上搜索出错原因得到结果: python中如果使用系统默认的open方法打开的文件...

    mysql数据乱码的原因及处理办法

    这是我积累的关于mysql的数据乱码的一写经验,有兴趣的可以看看

    ASCII表查询资料

    资源名称:ASCII表查询资料ASCII表查询文档,PDF版编程资料,本ASCII表查询手册列出了所有的A S C I I字符及其数值。有些A S C I I字符不能在计算机屏幕上显示出来,使用不同的字体可能会看到有些细微不同的结果。...

    PyScripter

    python 集成开发编码软件 1、先执行Python2.7.3.msi安装,安装...UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128) Pysripter的解析器输出中文乱码解决方案:

    解决uWSGI的编码问题详解

    UnicodeEncodeError: ‘ascii' codec can't encode characters in position 24-25: ordinal not in range(128) 有趣的是,直接在 Python 环境下运行的时候,没有这样的错误。使用 uwsgi uwsgi.in

    ubuntu安装程序

    安装Ubuntu  在Windows下可以不用重新分区,直接像安装一个应用程序...否则会出现错误信息“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)”而无法运行。

    python2.78+pyscripter2.53 附乱码解决方案

    python2.78 32位 pyscripter2.53 32位 附带Pyscripter报错的解决方法: 第一次打开就出错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2

    解决python3 网络请求路径包含中文的问题

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128) 解决如下: import urllib.parse reqStr = '你好' encodeStr = urllib.parse.quote(reqStr) print...

    Python字符串的encode与decode研究心得乱码问题解决方法

    为什么会报错“UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题。 字符串在Python内部的表示是unicode编码,因此,在做...

    django项目运行因中文而乱码报错的几种情况解决

    报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position x-x: ordinal not in range(128) 1.因代码中的中文注释问题的报错 django项目的.py文件文件中加入了中文注释,经常会因此报错而导致...

    解决python3 urllib 链接中有中文的问题

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 69-78: ordinal not in range(128) 解决方法 单独处理url中的中文如: import urllib s=‘中文' s=urllib.parse.quote(s)\nurl='some ...

Global site tag (gtag.js) - Google Analytics