1. 版本、依赖要求
Python 版本要求:Python >= 3.6
即可
需要安装的包(建议使用 conda、miniconda 等 python 环境管理器创建一个 python 环境后运行
- chardet
- tkinter
2. 实现功能
对某一文件夹及其子文件夹下的所有txt
文件,将原编码为gb2312
或UTF8
编码的文件,统一转换为带标签的UTF8 (UTF8 With BOM)
编码
3. 具体代码
软件代码使用【通义千问】生成
import os
import tkinter as tk
from tkinter import filedialog
import codecs
try:from chardet import detect# 此包是否安装,如果未安装则退出
except ImportError:print("Please install the chardet library: pip install chardet")exit(1)def convert_to_utf8_with_bom(file_path):"""将文件从当前编码转换为UTF-8 with BOM"""with open(file_path, 'rb') as file:# 读取原始编码的文件内容content = file.read()with open(file_path, 'wb') as file:file.write(content)# 尝试使用gb2312编码解码内容,因为gb2312编码是windows系统默认的编码try:print('尝试使用gb2312解码内容...')content_decoded = content.decode('gb2312')except UnicodeDecodeError:# 如果gb2312解码失败,说明文件不是gb2312编码,尝试使用utf-8解码try:print('尝试使用utf8解码内容...')content_decoded = content.decode('utf-8')except UnicodeDecodeError:# 如果utf-8解码失败,说明文件编码无法识别,跳过此文件print(f"解码错误:无法识别{file_path}的原始编码,跳过此文件。")return# 重新编码为UTF-8 with BOMcontent_utf8_with_bom = content_decoded.encode('utf-8-sig')# 写回文件,覆盖原文件为UTF-8 with BOM编码with open(file_path, 'wb') as file:file.write(content_utf8_with_bom)def process_folder(folder_path):"""处理指定文件夹内的所有txt文件"""for root, dirs, files in os.walk(folder_path):for file in files:if file.endswith('.txt'):file_path = os.path.join(root, file)print(f"转换中: {file_path}")convert_to_utf8_with_bom(file_path)print(f"完成: {file_path}")def select_folder():"""使用tkinter打开文件选择对话框选择文件夹"""root = tk.Tk()root.withdraw() # 隐藏主窗口folder_path = filedialog.askdirectory() # 弹出文件夹选择对话框if folder_path:print(f"选择的文件夹: {folder_path}")process_folder(folder_path)root.destroy()if __name__ == "__main__":select_folder()
4. 使用方法
- 执行脚本
- 弹窗选择文件夹
- 自动将文件夹、子文件夹内所有
.txt
文件转换编码,并输出转换结果- 转换中:文件名
- 尝试解码的信息
- 尝试使用 gb2312 解码
- 尝试使用 utf8 解码
- 解码错误:无法识别{ 文件名 }的原始编码,跳过此文件。
- 完成:文件名