对与一些文件,只是分析其内容,修改其编码类型不会产生其他影响的情况下可以采用此方式。
import chardet
def file_endcoding_format_convert(path):
newData = b''
with open(path, 'rb') as fp:
data = fp.read()
oldEncode = chardet.detect(data)['encoding']
if oldEncode != 'utf-8':
newData = data.decode(oldEncode).encode('utf-8')
with open(path, 'wb') as fw:
fw.write(newData)
有些文件修改器编码类型会对后续使用存在影响,所以不能修改编码方式,可以采用下面方法,以xml文件为例:
import chardet
import lxml
def read_xml(path):
with open(path, 'rb') as fp:
data = fp.read()
oldEncode = chardet.detect(data)['encoding']
parser = etree.XMLParser(encoding=oldEncode)
tree = etree.parse(path, parser=parser)
retrun tree