指定一個資料夾,遍歷資料夾內的檔案和子資料夾內的檔案,然後識別檔案字尾為cpp的檔案,透過chardet取檢測檔案的編碼格式,如果不是UTF-8-SIG,則轉換為UTF-8-SIG
python指令碼格式如下
import os import sys import codecs import chardet def convert(filename,out_enc="UTF-8-SIG"): try: content=codecs.open(filename,'rb+').read() source_encoding=chardet.detect(content)["encoding"] print(source_encoding) if source_encoding != "UTF-8-SIG":#"GB2312": content=content.decode(source_encoding).encode(out_enc) codecs.open(filename,'wb+').write(content) print("covert file "+filename) except IOError as err: print("I/O error:{0}".format(err)) def removeBom(file): '''移除UTF-8檔案的BOM位元組''' data = open(file,'rb+').read() if data[:3] == codecs.BOM_UTF8: data = data[3:] data.decode("utf-8") # print(data.decode("utf-8")) def explore(dir): for root,dirs,files in os.walk(dir): for file in files: if os.path.splitext(file)[1]=='.cpp': print(file) path=os.path.join(root,file) convert(path) # removeBom(path) def main(): explore(sys.argv[1]) if __name__=="__main__": main()
如果出現未找到chardet的錯誤,在cmd中執行下pip install chardet 命令,就可以安裝chardet
然後用cmd執行 執行命令 python ToUtf8.py test test是資料夾的名稱;就可以批次實現檔案的編碼格式識別和轉換了;