有些代码目录下的文件格式不同,会导致一些编译错误或者中文出现错误等等问题,下面脚本就是解决这个问题而生的。使用 Autoit3 编译脚本后放到你要转换的目录中,运行脚本会转换所有 .cpp、.h、.md 文件为 UTF8 格式,如果你希望修改成 UTF8-BOM 格式,可以将 $FO_UTF8_NOBOM 修改为 $FO_UTF8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <Array.au3> ; Only required to display the arrays
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

$aArray = _FileListToArrayRec(@ScriptDir, "*.cpp;*.h;*.md", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT)
_ArrayDisplay($aArray, "待转换列表.")

For $i = 0 To $aArray[0]
_Convert2UTF8(@ScriptDir & '\' & $aArray[$i])
Next

Func _Convert2UTF8($sFilePath)
Local $hInputFile = FileOpen($sFilePath)
Local $s_Txt = FileRead($hInputFile)
FileClose($hInputFile)
Local $hOutputFile = FileOpen($sFilePath, $FO_OVERWRITE + $FO_UTF8_NOBOM)
FileWrite($hOutputFile, $s_Txt)
FileClose($hOutputFile)
EndFunc

新增 Python3 版本的脚本,可以通过命令 pythonfile.py -e utf-8-sigpythonfile.py -e utf-8 对当前目录下文件进行转换。pythonfile.py 是你保存的文件名。执行前需要 pip install chardet 安装包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import argparse
import chardet
import codecs
import os

parser = argparse.ArgumentParser(description='convert encoding')
parser.add_argument('-e', '--encoding', dest='encoding', metavar=None, required=True, action='store', help='encoding')
args = parser.parse_args()

for root, dirs, files in os.walk(".", topdown=False):
for name in files:
if name.endswith(".cpp") or name.endswith(".h") or name.endswith(".md"):
content = codecs.open(os.path.join(root, name), 'rb').read()
encoding = chardet.detect(content)
if encoding["encoding"] is None:
continue
if encoding["encoding"].upper() != args.encoding.upper():
print(encoding["encoding"], "\t", os.path.join(root, name))
content = content.decode(encoding["encoding"], 'ignore')
codecs.open(os.path.join(root, name), 'w', encoding=args.encoding).write(content)