# -*- coding: utf-8 -*- """ 批量修复Vue文件中文乱码问题 将GBK错误编码的中文转换为正确的UTF-8编码 """ import os import re import chardet def detect_encoding(file_path): """检测文件编码""" with open(file_path, 'rb') as f: raw_data = f.read() result = chardet.detect(raw_data) return result['encoding'] def fix_garbled_text(text): """修复乱码文本""" # 常见的乱码模式和对应的正确文本 replacements = { # 基础词汇 '����': '加载', '������': '加载中', '����': '成功', '�ɹ�': '成功', 'ʧ��': '失败', '����ʧ��': '加载失败', '���ؼ�¼ʧ��': '加载记录失败', '���ؽ��׼�¼ʧ��': '加载交易记录失败', '����ͳ��ʧ��': '加载统计失败', # 状态相关 '������': '处理中', '��ȡ��': '已取消', '�����': '已完成', '�����': '进行中', '�ȴ�': '等待', '��ʼ': '开始', '����': '结束', # 类型相关 'ȫ��': '全部', '����': '本周', '����': '本月', '����': '收入', '֧��': '支出', '����': '充值', '����': '提现', '֧��': '支付', '�˿�': '退款', # 学习相关 'ѧϰ': '学习', 'ѧ��': '学生', '��ʦ': '老师', '����': '内容', '��ҵ': '作业', '����': '情况', '���': '评语', '���': '评分', '��¼': '记录', '����': '暂无', '����': '课程', '�б�': '列表', '��ϸ': '详细', # 统计相关 '�ۼ�': '累计', 'Сʱ': '小时', '����': '次数', 'ƽ��': '平均', '����': '总计', 'ͳ��': '统计', # 操作相关 '����': '添加', 'ɾ��': '删除', '�༭': '编辑', 'ȷ��': '确定', 'ȡ��': '取消', '����': '保存', '�ύ': '提交', '����': '修改', '��ѯ': '查询', 'ˢ��': '刷新', # 提示相关 '��û��': '还没有', '����': '信息', 'û�и���': '没有更多', '���ظ���': '加载更多', '���': '暂无', '��': '请', '����': '输入', '��ѡ��': '请选择', '������': '请输入', # 金额相关 '��': '¥', '���': '余额', '���': '金额', '�۸�': '价格', # 服务相关 '������': '陪伴服务', '���Ա': '陪伴员', '����': '分钟', '��': '月', '��': '日', '��': '年', '����': '服务', '����': '订单', '����': '工单', # 用户相关 '�û�': '用户', '����': '家长', '����': '管理', '����ʦ': '管理师', '������': '服务商', '��������': '分销员', # 时间相关 '����': '今天', '����': '昨天', '����': '明天', '����': '本周', '����': '本月', '����': '今年', # 地址相关 '��ַ': '地址', 'λ��': '位置', '��ǩ': '标签', # 消息相关 '��Ϣ': '消息', '֪ͨ': '通知', '����': '提醒', # 反馈相关 '����': '反馈', '����': '建议', '����': '评价', '����': '投诉', # 其他常用 '����': '详情', '����': '设置', '�˳�': '退出', '��¼': '登录', 'ע��': '注册', '����': '密码', '�ֻ�': '手机', '��֤��': '验证码', '��ע': '关注', '����': '收藏', '����': '分享', } result = text for old, new in replacements.items(): result = result.replace(old, new) return result def fix_vue_file(file_path): """修复单个Vue文件""" try: # 读取文件 with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: content = f.read() # 检查是否包含乱码 if '��' not in content and 'ȫ��' not in content and 'ѧϰ' not in content: return False, "无乱码" # 修复乱码 fixed_content = fix_garbled_text(content) # 如果内容有变化,写回文件 if fixed_content != content: with open(file_path, 'w', encoding='utf-8', newline='\n') as f: f.write(fixed_content) return True, "已修复" else: return False, "无变化" except Exception as e: return False, f"错误: {str(e)}" def scan_and_fix_directory(directory): """扫描并修复目录下的所有Vue文件""" fixed_files = [] skipped_files = [] error_files = [] for root, dirs, files in os.walk(directory): for file in files: if file.endswith('.vue'): file_path = os.path.join(root, file) success, message = fix_vue_file(file_path) if success: fixed_files.append(file_path) print(f"✓ 已修复: {file_path}") elif "错误" in message: error_files.append((file_path, message)) print(f"✗ 错误: {file_path} - {message}") else: skipped_files.append(file_path) return fixed_files, skipped_files, error_files if __name__ == '__main__': # 设置要扫描的目录 target_dir = 'peidu/uniapp/src' print("=" * 60) print("开始批量修复Vue文件中文乱码问题") print("=" * 60) print(f"扫描目录: {target_dir}") print() # 执行修复 fixed, skipped, errors = scan_and_fix_directory(target_dir) # 输出统计 print() print("=" * 60) print("修复完成统计") print("=" * 60) print(f"已修复文件数: {len(fixed)}") print(f"跳过文件数: {len(skipped)}") print(f"错误文件数: {len(errors)}") print() if fixed: print("已修复的文件:") for f in fixed[:10]: # 只显示前10个 print(f" - {f}") if len(fixed) > 10: print(f" ... 还有 {len(fixed) - 10} 个文件") if errors: print("\n错误文件:") for f, msg in errors: print(f" - {f}: {msg}") print("\n建议:") print("1. 重新编译项目: npm run dev:mp-weixin") print("2. 在微信开发者工具中验证修复效果") print("3. 检查页面显示是否正常")