对开发者来说,最让人头疼的问题之一莫过于读写文件的时候,由于编码千差万别,出现乱码问题。这时候我们可以使用chardet包来检测文件类型,然后再根据类型来decode,下面看举个例子:
案例展示:

# encoding: utf-8
import chardet

with open('test.txt','r') as f:
    data = f.read()
type = chardet.detect(data)
print data.decode(type['encoding'])

我在[print data.decode(type[‘encoding’])]这一行打个断点,Dbug一下,可以看到encoding =’GB2312’ ,说明文件的编码类型为’GB2312’。



python在doc出现乱码 python打开乱码_python在doc出现乱码


然后,我们将代码中的encoding修改为对应的编码,即可正常显示文件:
修改后的代码:

# encoding: utf-8
import chardet

with open('test.txt','r') as f:
    data = f.read()
type = chardet.detect(data)
print data.decode('GB2312')

运行结果:



python在doc出现乱码 python打开乱码_python在doc出现乱码_02


今后所有的读取文件地方,在显示之前,我们都可以用chardet检测一下字符串的编码,相应解码,就可以避免文件乱码的情况了。