peixue-dev/Archive/[一次性]批量修复乱码问题-Python脚本-2026-01-27.py

255 lines
7.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- 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 = {
# 基础词汇
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '加载',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '加载中',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '成功',
'<EFBFBD>ɹ<EFBFBD>': '成功',
'ʧ<EFBFBD><EFBFBD>': '失败',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>': '加载失败',
'<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>¼ʧ<EFBFBD><EFBFBD>': '加载记录失败',
'<EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD>׼<EFBFBD>¼ʧ<EFBFBD><EFBFBD>': '加载交易记录失败',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>': '加载统计失败',
# 状态相关
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '处理中',
'<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>': '已取消',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '已完成',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '进行中',
'<EFBFBD>ȴ<EFBFBD>': '等待',
'<EFBFBD><EFBFBD>ʼ': '开始',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '结束',
# 类型相关
'ȫ<EFBFBD><EFBFBD>': '全部',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '本周',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '本月',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '收入',
'֧<EFBFBD><EFBFBD>': '支出',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '充值',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '提现',
'֧<EFBFBD><EFBFBD>': '支付',
'<EFBFBD>˿<EFBFBD>': '退款',
# 学习相关
'ѧϰ': '学习',
'ѧ<EFBFBD><EFBFBD>': '学生',
'<EFBFBD><EFBFBD>ʦ': '老师',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '内容',
'<EFBFBD><EFBFBD>ҵ': '作业',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '情况',
'<EFBFBD><EFBFBD><EFBFBD>': '评语',
'<EFBFBD><EFBFBD><EFBFBD>': '评分',
'<EFBFBD><EFBFBD>¼': '记录',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '暂无',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '课程',
'<EFBFBD>б<EFBFBD>': '列表',
'<EFBFBD><EFBFBD>ϸ': '详细',
# 统计相关
'<EFBFBD>ۼ<EFBFBD>': '累计',
'Сʱ': '小时',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '次数',
'ƽ<EFBFBD><EFBFBD>': '平均',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '总计',
'ͳ<EFBFBD><EFBFBD>': '统计',
# 操作相关
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '添加',
'ɾ<EFBFBD><EFBFBD>': '删除',
'<EFBFBD>': '编辑',
'ȷ<EFBFBD><EFBFBD>': '确定',
'ȡ<EFBFBD><EFBFBD>': '取消',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '保存',
'<EFBFBD>ύ': '提交',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '修改',
'<EFBFBD><EFBFBD>ѯ': '查询',
'ˢ<EFBFBD><EFBFBD>': '刷新',
# 提示相关
'<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>': '还没有',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '信息',
'û<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD>': '没有更多',
'<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>': '加载更多',
'<EFBFBD><EFBFBD><EFBFBD>': '暂无',
'<EFBFBD><EFBFBD>': '',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '输入',
'<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>': '请选择',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '请输入',
# 金额相关
'<EFBFBD><EFBFBD>': '¥',
'<EFBFBD><EFBFBD><EFBFBD>': '余额',
'<EFBFBD><EFBFBD><EFBFBD>': '金额',
'<EFBFBD>۸<EFBFBD>': '价格',
# 服务相关
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '陪伴服务',
'<EFBFBD><EFBFBD><EFBFBD>Ա': '陪伴员',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '分钟',
'<EFBFBD><EFBFBD>': '',
'<EFBFBD><EFBFBD>': '',
'<EFBFBD><EFBFBD>': '',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '服务',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '订单',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '工单',
# 用户相关
'<EFBFBD>û<EFBFBD>': '用户',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '家长',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '管理',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʦ': '管理师',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '服务商',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '分销员',
# 时间相关
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '今天',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '昨天',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '明天',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '本周',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '本月',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '今年',
# 地址相关
'<EFBFBD><EFBFBD>ַ': '地址',
'λ<EFBFBD><EFBFBD>': '位置',
'<EFBFBD><EFBFBD>ǩ': '标签',
# 消息相关
'<EFBFBD><EFBFBD>Ϣ': '消息',
'֪ͨ': '通知',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '提醒',
# 反馈相关
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '反馈',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '建议',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '评价',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '投诉',
# 其他常用
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '详情',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '设置',
'<EFBFBD>˳<EFBFBD>': '退出',
'<EFBFBD><EFBFBD>¼': '登录',
'ע<EFBFBD><EFBFBD>': '注册',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '密码',
'<EFBFBD>ֻ<EFBFBD>': '手机',
'<EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>': '验证码',
'<EFBFBD><EFBFBD>ע': '关注',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '收藏',
'<EFBFBD><EFBFBD><EFBFBD><EFBFBD>': '分享',
}
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 '<EFBFBD><EFBFBD>' not in content and 'ȫ<EFBFBD><EFBFBD>' 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. 检查页面显示是否正常")