当前位置: 首页 > news >正文

python 脚本 遍历目录,并把目录下的非utf-8文件改成utf8

从网上下载的qt项目我本地编译里面经常包含中文,提示编译不过,实际上以前经常手动转,发觉还是用脚本不,毕竟这次下的有点大,我只改.h .cpp

#python D:\python\filetoUtf.py  E:\EasyCanvas-master\EasyCanvas-masterimport os
import codecs
import argparse
import sysdef convert_to_utf8_bom(file_path):"""将文件转换为 UTF-8 with BOM 格式"""try:# 读取原始文件内容with open(file_path, 'rb') as f:content_bytes = f.read()# 尝试检测原始编码try:content_text = content_bytes.decode('utf-8')# 如果已经是UTF-8且包含BOM,跳过if content_bytes.startswith(codecs.BOM_UTF8):print("✓ " + file_path + " 已经是 UTF-8 with BOM")returnexcept UnicodeDecodeError:# 尝试其他常见编码try:content_text = content_bytes.decode('gbk')except:try:content_text = content_bytes.decode('latin1')except:content_text = content_bytes.decode('utf-8', errors='replace')# 添加BOM并写入文件with open(file_path, 'w', encoding='utf-8-sig') as f:f.write(content_text)print("★ " + file_path + " 已成功转换为 UTF-8 with BOM")except Exception as e:print("✗ 处理 " + file_path + " 时出错: " + str(e))def process_directory(directory):"""递归处理目录中的所有 C++ 文件"""for root, _, files in os.walk(directory):for file in files:if file.lower().endswith(('.cpp', '.h', '.hpp', '.cxx', '.cc')):file_path = os.path.join(root, file)convert_to_utf8_bom(file_path)if __name__ == "__main__":# 检查Python版本if sys.version_info < (3, 0):print("错误: 需要 Python 3.x 版本")sys.exit(1)parser = argparse.ArgumentParser(description='将 C++ 文件转换为 UTF-8 with BOM 编码')parser.add_argument('directory', nargs='?', default='.', help='要处理的目录 (默认为当前目录)')args = parser.parse_args()target_dir = os.path.abspath(args.directory)print("=" * 60)print("开始处理目录: " + target_dir)print("=" * 60)process_directory(target_dir)print("=" * 60)print("处理完成!建议在 .pro 文件中添加: win32-msvc*: QMAKE_CXXFLAGS += /utf-8")print("=" * 60)

执行脚本

http://www.lqws.cn/news/547111.html

相关文章:

  • 16.2 Docker多阶段构建实战:LanguageMentor镜像瘦身40%,支持500+并发1.2秒响应!
  • 02【C++ 入门基础】标准输入输出初识/缺省参数
  • Qt 与 Halcon 联合开发六:基于海康SDK设计完整的相机类【附源码】
  • 【Elasticsearch】Linux环境下安装Elasticsearch
  • git rebase -i 详解
  • 微服务中解决高并发问题的不同方法!
  • 未来蓝图:引领能源数字化新浪潮
  • html制作一个简单的表单
  • 每天一个前端小知识 Day 14 - 前端状态管理深入实践
  • [1-01-01].第27节:常用类 - 包装类
  • 26考研|数学分析:隐函数定理及其应用
  • 官方App Store,直链下载macOS ,无需Apple ID,macOS10.10以上.
  • php flush实时输出线上环境好使,本地环境等待一段时间后一次性输出结果的原因
  • 跨芯片 AI 算子库 FlagGems 正式加入PyTorch 基金会生态项目体系
  • MyBatis中的SQL理解
  • uniappx 安卓app项目本地打包运行,腾讯地图报错:‘鉴权失败,请检查你的key‘
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • 基于springboot的火锅店点餐系统
  • 分布式存储架构的优势
  • 河北对口计算机高考C#笔记(2026高考适用)---完结版~~~~
  • GPS不只是导航,实时定位追踪系统如何玩转智能时代?
  • 深度学习框架入门指南:PyTorch 核心实战
  • 第N5周:Pytorch文本分类入门
  • 使用GDAL库统计不同分区内的灾害点分布情况,计算灾害相对密度等统计指标
  • Spring Boot 3.2.11 Swagger版本推荐
  • Python 数据分析与可视化 Day 9 - 缺失值与异常值处理技巧
  • 从0到100:房产中介小程序开发笔记(中)
  • css去掉换行小工具 去掉css换行 style样式去掉换行
  • flink同步kafka到paimon,doris加速查询
  • 大数据赋能智能家居:打造你贴心的“数字管家”