python批次將檔案編碼格式轉換為 UTF8帶標籤的格式,解決linux環境下中文編碼亂碼的問題

一字千金發表於2024-12-04

指定一個資料夾,遍歷資料夾內的檔案和子資料夾內的檔案,然後識別檔案字尾為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是資料夾的名稱;就可以批次實現檔案的編碼格式識別和轉換了;

相關文章