加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

永久修改python默认的字符编码为utf-8

(2013-12-24 14:41:06)
标签:

python

utf-8

编码

字符

it

分类: Linux

使用Python处理一堆中文、英文掺杂的数据,当调用file.write() file.writeliens()时候,总是提示'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)错误。

原因

.py文件是utf-8格式的编码,Python执行环境的默认编码是什么呢?使用sys.getdefaultencoding()可以看到,默认的Python环境(可能你的机器上不是)是ascii编码。这就是问题所在。Python自然调用ascii编码解码程序去处理字符流,当字符流不属于ascii范围内,就会抛出异常(ordinal not in range(128))。

解决方式

  1. 一种解决办法是,修改Python环境的默认编码为utf8,修改方式有两种:

    1. 在当前的Python文件中修改,调用sys的setdefaultencoding方法。在调用之前,需要先reload一下sys模块: reload(sys) sys.setdefaultencoding('utf-8')

    2. 另一种方式为,把上面的代码写入一个py文件,放到python的site-package目录下。这种方式不推荐。

  2. 之所以不推荐1中的2方法,是因为,这个报错是字符串编码的问题。通过字符串的编码、解码(encode decode)就可以解决。在StackOverFlow上搜到了一个更便捷的方法,代码如下:

    
    content = = u''.join(("your_ascii_content")).encode('utf-8').strip()
    
    

    content就是编码好的内容。方便大方实用!


这个修改说来简单,其实不同的系统,修改起来还真不一样。下面来罗列下3中情况


首先所有修改的动作都是要创建一个叫 sitecustomize.py的文件,为什么要创建这个文件呢,是因为python在启动的时候会去load的这个文件,所以你如果要修改一些启动的变量就可以把操作写在这个文件。


修改默认字符编码的代码很简单就2行:

# sitecustomize.py                   # this file can be anywhere in your Python path,
# but it usually goes in ${pythondir}/lib/site-packages/
import sys
sys.setdefaultencoding('utf-8') 
好了后面的问题来了,写完这个文件放哪里呢。 
1)windows windows上存放的地方还是比较简单的,存放在你python的安装的目录Lib\site-packages(比如C:\Python27\Lib\site-packages)里。 
2)linux linux上我发现有两种情况,你可以都试试 有些系统是存放在/usr/local/lib/python.27/site-packages 里,如果你放在这里面没效果 就试试放到 /usr/lib/python2.7 里。 我ubuntu最后发现存放的目录是后者 

怎么验证是否修改成功呢
import sys
sys.getdefaultencoding() 
看看返回的是不是‘utf-8’

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有