refactor(zhenxun): 调整 unicode_escape 和 unicode_unescape 函数位置

- 从 db_context.py 中移除这两个函数
- 将它们添加到 utils.py 中,以更好地组织代码
This commit is contained in:
molanp 2025-07-14 22:55:43 +08:00
parent 05ca69bd4c
commit 258d154f06
2 changed files with 36 additions and 35 deletions

View File

@ -11,6 +11,7 @@ from tortoise.models import Model as Model_
from zhenxun.configs.config import BotConfig from zhenxun.configs.config import BotConfig
from zhenxun.utils.exception import HookPriorityException from zhenxun.utils.exception import HookPriorityException
from zhenxun.utils.manager.priority_manager import PriorityLifecycle from zhenxun.utils.manager.priority_manager import PriorityLifecycle
from zhenxun.utils.utils import unicode_escape, unicode_unescape
from .log import logger from .log import logger
@ -21,41 +22,6 @@ MODELS: list[str] = []
driver = nonebot.get_driver() driver = nonebot.get_driver()
def unicode_escape(value: str) -> str:
"""
将字符串转换为Unicode转义形式仅处理未转义的特殊字符
已经转义过的字符串保持不变
"""
if not value:
return value
if re.search(r"\\u[0-9a-fA-F]{4}", value):
return value
return "".join(
char
if 0x20 <= ord(char) <= 0x7E or char in ("\n", "\r", "\t")
else f"\\u{ord(char):04x}"
for char in value
)
def unicode_unescape(value: str) -> str:
"""
安全还原字符串中的Unicode转义序列
如果不是有效转义序列保留原样
"""
if not value:
return value
# 仅处理有效的 \uXXXX 格式
return re.sub(
r"(?<!\\)\\u([0-9a-fA-F]{4})", # 匹配未被转义的 \uXXXX
lambda m: chr(int(m.group(1), 16)),
value,
)
class UnicodeSafeMixin(Model_): class UnicodeSafeMixin(Model_):
_unicode_safe_fields: list[str] = [] # noqa: RUF012 _unicode_safe_fields: list[str] = [] # noqa: RUF012
"""需要处理的字段名列表""" """需要处理的字段名列表"""

View File

@ -2,6 +2,7 @@ from collections import defaultdict
from datetime import date, datetime from datetime import date, datetime
import os import os
from pathlib import Path from pathlib import Path
import re
import time import time
from typing import Any from typing import Any
@ -261,3 +262,37 @@ class TimeUtils:
if isinstance(target_date, datetime) if isinstance(target_date, datetime)
else datetime.combine(target_date, datetime.min.time()) else datetime.combine(target_date, datetime.min.time())
) )
def unicode_escape(value: str) -> str:
"""
将字符串转换为Unicode转义形式仅处理未转义的特殊字符
已经转义过的字符串保持不变
"""
if not value:
return value
if re.search(r"\\u[0-9a-fA-F]{4}", value):
return value
return "".join(
char
if 0x20 <= ord(char) <= 0x7E or char in ("\n", "\r", "\t")
else f"\\u{ord(char):04x}"
for char in value
)
def unicode_unescape(value: str) -> str:
"""
安全还原字符串中的Unicode转义序列
如果不是有效转义序列保留原样
"""
if not value:
return value
# 仅处理有效的 \uXXXX 格式
return re.sub(
r"(?<!\\)\\u([0-9a-fA-F]{4})", # 匹配未被转义的 \uXXXX
lambda m: chr(int(m.group(1), 16)),
value,
)