1 #!/usr/bin/env python3
2 #coding=utf-8
3
4 importos, csv, sys, locale, codecs, chardet, time5 from argparse importArgumentParser, RawTextHelpFormatter6
7 #操作系统中默认的文件编码(当文件编码为中文扩展字符集时,统一使用gb18030编码--比gb2312和gbk支持的汉字多,同时兼容gb2312和gbk)
8 #中文扩展字符集编码列表
9 chinese_charsetstr='|gbk|gb2312|gb18030|cp936|'
10 default_chinese_charset='gb18030'
11 #使用gb18030解决了类似下面的错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xf8 in position 5902: illegal multibyte sequence
12 defaultencoding = default_chinese_charset if chinese_charsetstr.find(locale.getpreferredencoding().lower())>0 elselocale.getpreferredencoding().lower()13
14 def detectfileencoding(filename, filerowcount=None, info_fileobj=None):15 #获取文件编码(为空则设置为操作系统默认文件编码,其中中文扩展字符集统一设置为'gb18030'大字符集)
16 time_start=time.time()17 #编码检测结果
18 detectresult=''
19 with codecs.open(filename, 'rb') as fobj:20 if filerowcount==None:21 fcontent =fobj.read()22 detectresult =chardet.detect(fcontent)23 else:24 linenum =025 maxdetectrownum = 100 if filerowcount > 100 elsefilerowcount26 #初始化要检测编码的内容
27 fcontent =bytes()28 for line infobj.readlines():29 linenum += 1
30 if linenum