#!/usr/bin/python
import sys
import os
import signal
import shutil
sys.path = ["../"] + sys.path
import chardet
import traceback
###################################################
#main函数
def ReadLines(fileName):
fd = open(fileName, "rb")#要有"rb",如果没有这个的话,默认使用gbk读文件。
buf = fd.read()
fd.close()
result = chardet.detect(buf)
str=result["encoding"]
fd = open(fileName,"r",encoding=result["encoding"])
lines = fd.readlines()
fd.close()
return lines
def ConvertFile(strFileName, strEncoding, bBak):
fd = open(strFileName, "rb")#要有"rb",如果没有这个的话,默认使用gbk读文件。
buf = fd.read()
fd.close()
result = chardet.detect(buf)
str=result["encoding"]
print ("文件编码:", str)
tarEncoding = "utf-8"
if str != tarEncoding:
# 读文件
fd = open(strFileName,"r",encoding=result["encoding"])
lines = fd.readlines()
fd.close()
#备份文件
if bBak != 0:
strBakupFile = strFileName + ".bak"
shutil.move(strFileName,strBakupFile)
# 写文件
fw = open(strFileName, "w", encoding=tarEncoding)
for line in lines:
print (line, end="", file=fw)
fw.close()
print ("文件转换结束:", strFileName)
else:
print ("文件不需要转换:", strFileName)
def main():
try:
bBak = 1
if len(sys.argv) > 2 and sys.argv[2] == "nobak":
bBak = 0
if len(sys.argv) > 1:
p1 = sys.argv[1]
# 目录
if os.path.isdir(p1):
for item in os.listdir(p1):
file = os.path.join(p1, item)
if os.path.isdir(file): # 目录
pass
else:
ConvertFile(file, "utf-8", bBak)
# 文件
else:
ConvertFile(sys.argv[1], "utf-8", bBak)
else:
print ("toUTF8 fileName/pathName <bak>")
except:
traceback.print_exc()
sys.exit(0)
#####################################################
def signal_handler(signal, frame):
print('You pressed Ctrl+C!')
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
#进入main函数
main()