在编写python代码时一般要在页首指定编码格式
#-*- coding:gbk -*-
如果指定了编码格式为gbk,则如果想在代码读取一个非utf-8格式的文件,则需要首先读取的信息转成gbk
infile = file(spath, 'r')
line = infile.readline().strip()
line = line.decode('gbk')
但是当我们加了这一行时,经常会遇到
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 30664-30665: illegal mul
这是因为在解码时在位置30664-30665遇到了异常字符。
解决办法是:
line = line.decode('gbk','replace')
decode有三种模式,ignore、replace和restrict。分别代表转码时遇到特殊字符忽略、替换为?和最严厉的策略。
当然最严厉的就是遇到就不再编码了,直接打报告出来。
在python中我理解的是unicode 是一个中间编码格式,就是没种编码如果要转成其他格式都要先转成unicode。
譬如gbk转utf-8
line = line.decode('gbk')
先转换成unicode
line = line.encode('utf-8')
也可以写成一句
line = line.decode('gbk').encode('utf-8')
如何测试当前字串编码格式:
使用chardet-2.1.1(从网上搜索下载)
使用方式:
import sys
#加载你chardet放置的位置
sys.path.append("B:\Develop\pythonLib\chardet-2.1.1")
import chardet
print chardet.detect(str)