Python里面中文乱码问题一个让初学者很头痛的问题,自己在做项目的时候也遇到不少的编码问题,在这里做一个小小的总结。
- 编码转换
- 中文乱码问题
- 外部文件读取
1. 编码转换
:Python内部使用Unicode作为默认编码来表示字符串(string)。在编码转换的过程中,将Unicode作为中间编码进行过度是一个本质的思想。
FromCode –> Unicode –> ToCode
从FomeCode转成Unicode的过程叫做decode();
从Unicode转换成ToCode 的过程叫做encode();
例如:GBK –> Unicode –> utf-8
写法:str.decode(‘GBK’).encode(‘utf-8’)
注:已经是Unicode编码的字符串不能进行decode。
2. 中文乱码问题
Python默认会把源代码用ASCII(American Standard Code for Information Interchange)编码进行处理,在只使用英文字符的情况下,不会出现问题,但是如果用了中文,就会出现报错(SyntaxError: Non-ASCII character),因为用ASCII编码方式是无法处理中文的。
默认处理方式:源代码 –> ASCII –> Unicode –> ASCII –> 结果
以下的代码查看默认的编码方式:
import sys
print sys.getdefaultencoding()
因此,通常我们会在源代码的第一行注释# -- coding: utf-8 --。表示设置编辑器的默认保存为 utf8 格式。这样在编辑代码的时候就不用考虑编码转换问题。
同样也可以对Python的全局进行编码设定:
import sys
sys.setdefaultencoding('utf-8')
3. 外部文件读取
从外部读取文件时也会造成中文乱码的问题,比如从excel、text中读取文件,需要注意读取的文件的编码格式,根据文件本身的编码格式先做decode成Unicode,然后再做处理。
判断字符串的编码方式:
import chardet
chardet.detect("编码")
##{'confidence': 0.7525, 'encoding': 'utf-8'}