永久修改python默认的字符编码为utf-8
(2013-12-24 14:41:06)
标签:
pythonutf-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))。
解决方式
-
一种解决办法是,修改Python环境的默认编码为utf8,修改方式有两种:
-
在当前的Python文件中修改,调用sys的
setdefaultencoding
方法。在调用之前,需要先reload
一下sys模块: reload(sys) sys.setdefaultencoding('utf-8') -
另一种方式为,把上面的代码写入一个py文件,放到python的site-package目录下。这种方式不推荐。
-
-
之所以不推荐1中的2方法,是因为,这个报错是字符串编码的问题。通过字符串的编码、解码(
encode
decode
)就可以解决。在StackOverFlow上搜到了一个更便捷的方法,代码如下:content = = u''.join(("your_ascii_content")).encode('utf-8').strip()
content就是编码好的内容。方便大方实用!
这个修改说来简单,其实不同的系统,修改起来还真不一样。下面来罗列下3中情况 首先所有修改的动作都是要创建一个叫 sitecustomize.py的文件,为什么要创建这个文件呢,是因为python在启动的时候会去load的这个文件,所以你如果要修改一些启动的变量就可以把操作写在这个文件。 修改默认字符编码的代码很简单就2行: # sitecustomize.py# 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’ |