135 lines
6.2 KiB
Python
135 lines
6.2 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
修复 complete_mall_database.sql 中的 UTF-8 替换字符乱码
|
||
原始文件中大量中文字符被替换为 \xef\xbf\xbd (U+FFFD)
|
||
"""
|
||
|
||
import os
|
||
|
||
import os
|
||
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))
|
||
SRC = os.path.join(ROOT, "医疗-consumer", "mall_sql", "schemas", "complete_mall_database.sql")
|
||
DST = os.path.join(ROOT, "医疗-consumer", "mall_sql", "schemas", "complete_mall_database_fixed.sql")
|
||
DOC = os.path.join(ROOT, "医疗-consumer", "docs", "数据库对接文档.md")
|
||
|
||
# 读取原始文件(bytes)
|
||
with open(SRC, "rb") as f:
|
||
raw = f.read()
|
||
|
||
# 先把替换字符替换成一个临时标记,便于后续处理
|
||
marker = b"{{GARBLED}}"
|
||
raw = raw.replace(b"\xef\xbf\xbd", marker)
|
||
|
||
# 解码为字符串(此时已无替换字符)
|
||
text = raw.decode("utf-8")
|
||
|
||
# 批量替换:根据上下文推断正确字符
|
||
replacements = [
|
||
# 模块标题 / 注释
|
||
("数据库设{{GARBLED}}", "数据库设计"),
|
||
("复用{{GARBLED}} ak_users", "复用主表 ak_users"),
|
||
("包含: 表结构、索引、触发器、RLS策略、视图、函{{GARBLED}}", "包含: 表结构、索引、触发器、RLS策略、视图、函数"),
|
||
("基础配置和扩{{GARBLED}}", "基础配置和扩展"),
|
||
("启用必要的扩{{GARBLED}}", "启用必要的扩展"),
|
||
("用户扩展{{GARBLED}}", "用户扩展表"),
|
||
("商城用户扩展信息{{GARBLED}}", "商城用户扩展信息表"),
|
||
("营业执照{{GARBLED}}", "营业执照号"),
|
||
("认证状{{GARBLED}}", "认证状态"),
|
||
("未认{{GARBLED}}", "未认证"),
|
||
("已认{{GARBLED}}", "已认证"),
|
||
("用户地址{{GARBLED}}", "用户地址表"),
|
||
("商品管理{{GARBLED}}", "商品管理模块"),
|
||
("商品分类{{GARBLED}}", "商品分类表"),
|
||
("品牌{{GARBLED}}", "品牌表"),
|
||
("商品{{GARBLED}}", "商品表"),
|
||
("基础属{{GARBLED}}", "基础属性"),
|
||
("状{{GARBLED}}", "状态"),
|
||
("商品SKU{{GARBLED}}", "商品SKU表"),
|
||
("商品规格{{GARBLED}}", "商品规格表"),
|
||
("规格值数{{GARBLED}}", "规格值数组"),
|
||
("店铺管理{{GARBLED}}", "店铺管理模块"),
|
||
("店铺信息{{GARBLED}}", "店铺信息表"),
|
||
("订单管理{{GARBLED}}", "订单管理模块"),
|
||
("订单{{GARBLED}}", "订单表"),
|
||
("总金{{GARBLED}}", "总金额"),
|
||
("状态信{{GARBLED}}", "状态信息"),
|
||
("待付{{GARBLED}}", "待付款"),
|
||
("待发{{GARBLED}}", "待发货"),
|
||
("待收{{GARBLED}}", "待收货"),
|
||
("已完{{GARBLED}}", "已完成"),
|
||
("已取{{GARBLED}}", "已取消"),
|
||
("退款中 7:已退{{GARBLED}}", "退款中 7:已退款"),
|
||
("订单商品{{GARBLED}}", "订单商品表"),
|
||
("营销管理{{GARBLED}}", "营销管理模块"),
|
||
("NULL表示平台{{GARBLED}}", "NULL表示平台券"),
|
||
("满减{{GARBLED}}", "满减券"),
|
||
("折扣{{GARBLED}}", "折扣券"),
|
||
("百分{{GARBLED}}", "百分比"),
|
||
("优惠{{GARBLED}}", "优惠值"),
|
||
("最低订单金{{GARBLED}}", "最低订单金额"),
|
||
("最大优惠金{{GARBLED}}", "最大优惠金额"),
|
||
("总发放数{{GARBLED}}", "总发放数量"),
|
||
("每用户限领数{{GARBLED}}", "每用户限领数量"),
|
||
("使用次数限{{GARBLED}}", "使用次数限制"),
|
||
("已结{{GARBLED}}", "已结束"),
|
||
("未使{{GARBLED}}", "未使用"),
|
||
("已使{{GARBLED}}", "已使用"),
|
||
("已过{{GARBLED}}", "已过期"),
|
||
("配送员信息{{GARBLED}}", "配送员信息表"),
|
||
("电动{{GARBLED}}", "电动车"),
|
||
("摩托{{GARBLED}}", "摩托车"),
|
||
("配送距{{GARBLED}}", "配送距离"),
|
||
("预计配送时{{GARBLED}}", "预计配送时间"),
|
||
("取货{{GARBLED}}", "取货码"),
|
||
("评价管理{{GARBLED}}", "评价管理模块"),
|
||
("商品评价{{GARBLED}}", "商品评价表"),
|
||
("已删{{GARBLED}}", "已删除"),
|
||
("已隐{{GARBLED}}", "已隐藏"),
|
||
("用户行为{{GARBLED}}", "用户行为模块"),
|
||
("用户收藏{{GARBLED}}", "用户收藏表"),
|
||
("用户浏览历史{{GARBLED}}", "用户浏览历史表"),
|
||
("浏览时长({{GARBLED}}", "浏览时长(秒)"),
|
||
("搜索记录{{GARBLED}}", "搜索记录表"),
|
||
("系统配置{{GARBLED}}", "系统配置表"),
|
||
("地区{{GARBLED}}", "地区表"),
|
||
("用户扩展表索{{GARBLED}}", "用户扩展表索引"),
|
||
("地址表索{{GARBLED}}", "地址表索引"),
|
||
("商品表索{{GARBLED}}", "商品表索引"),
|
||
("SKU表索{{GARBLED}}", "SKU表索引"),
|
||
("订单表索{{GARBLED}}", "订单表索引"),
|
||
("订单商品表索{{GARBLED}}", "订单商品表索引"),
|
||
("收藏表索{{GARBLED}}", "收藏表索引"),
|
||
("触发器函{{GARBLED}}", "触发器函数"),
|
||
("自动更新 updated_at 字段的函{{GARBLED}}", "自动更新 updated_at 字段的函数"),
|
||
("为需要的表创{{GARBLED}}updated_at 触发{{GARBLED}}", "为需要的表创建 updated_at 触发器"),
|
||
("商品库存更新触发{{GARBLED}}", "商品库存更新触发器"),
|
||
("更新商品总库{{GARBLED}}", "更新商品总库存"),
|
||
("订单状态变更时的处{{GARBLED}}", "订单状态变更时的处理"),
|
||
("更新商品销{{GARBLED}}", "更新商品销量"),
|
||
("生成优惠券码的函{{GARBLED}}", "生成优惠券码的函数"),
|
||
("计算购物车总金{{GARBLED}}", "计算购物车总金额"),
|
||
("获取商品总库{{GARBLED}}", "获取商品总库存"),
|
||
("自己的数{{GARBLED}}", "自己的数据"),
|
||
("初始化数{{GARBLED}}", "初始化数据"),
|
||
("优惠券设{{GARBLED}}", "优惠券设置"),
|
||
("已创建索{{GARBLED}} 30+ 个索{{GARBLED}}", "已创建索引 30+ 个索引"),
|
||
("已创建函{{GARBLED}} 10+ 个函{{GARBLED}}", "已创建函数 10+ 个函数"),
|
||
("已创建视{{GARBLED}} 3 个视{{GARBLED}}", "已创建视图 3 个视图"),
|
||
]
|
||
|
||
for old, new in replacements:
|
||
text = text.replace(old, new)
|
||
|
||
# 写入修复后的文件
|
||
with open(DST, "w", encoding="utf-8") as f:
|
||
f.write(text)
|
||
|
||
# 检查是否还有残留
|
||
remaining = text.count("{{GARBLED}}")
|
||
print(f"修复完成,残留乱码标记: {remaining}")
|
||
if remaining > 0:
|
||
for i, line in enumerate(text.splitlines(), 1):
|
||
if "{{GARBLED}}" in line:
|
||
print(f" Line {i}: {line.strip()[:120]}")
|