从接触python开始,python的编码问题就一直困扰着我,现在总结下平时遇到的编码问题。
1、中文显示问题
对于我这种英语不好的同志来说,在python代码中写中文注释再普通不过了,这就带来了一个编码的问题。
#!/usr/bin/python
b = '中文测试'
print b
上述代码会报错:SyntaxError: Non-ASCII character '\xe4'
原因是python默认采用ASCII编码保存文件,在ASCII表中没有表示中文的字符,因此无法将中文以ASCII码的形式保存在文件中。
解决上述问题的方法是:在python文件第二行加上#coding=utf-8(gbk也行),设置文件已utf8编码格式存储。
2、str字节串和unicode混用
在很多情况下,我们会在代码中拼接字符串(包括格式化):
#!/usr/bin/python
# -*- coding: utf-8 -*-
b = '中文测试'
c = u'test'
d = b + c
print d
上述代码会报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0
原因:python遇到str对象和unicode对象时,会自动将字节串自动decode为unicode,可以等效为decode(sys.defaultencoding)。python的系统默认编码为ASCII,所以将中文的字节串以ASCII编码方式解码时会报错。
解决方法如下:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
设置系统的默认编码为utf-8,python自动解码时,会将中文以utf-8编码方式解码。
python写文件时,若传入write的参数是unicode,那么python同样会自动以默认编码进行编码后写入文件。
当然,python的编码问题不止这些,如果遇到相关问题,只需要保证编码流程为str->unicode->str,以unicode为中心,问题就不会太大!
(上述为个人观点,有不足之处望指出)