
看起来相同的字符可能有不同编码,但把字符归一化也可能改变合法内容。客服和安全日志需要一份便于比较的副本,更需要一份能够回到原始证据的记录。
原文、规范化与翻译分开
NFKC会折叠部分兼容字符,适合某些匹配任务,却不等于理解语言。删除零宽字符可能破坏排版或语言表达;强制翻译还会引入另一套模型误差。不能把规范化后的“没有命中关键词”当成合规判定。
做法是保存原始摘要、转换名称和规范化副本;规则只作用于副本,展示争议和人工复核时能够回看原文。结构化业务参数采用自己的类型和枚举约束,不从清洗后的自然语言直接生成权限。
10月5日Google Research对上下文安全的讨论,也适用于这里:文字怎么写和动作是否合适,是不同层面的判断。跨语言表达更不能省去对象权限检查。

图中的原始记录保持只读,转换产物另存,不覆盖原始证据。
给规范化副本附上原始摘要
以下是可离线运行的最小示例,使用Python标准库。输入均为教学构造,不连接业务系统。
import hashlib
import unicodedata
def evidence(text):
raw = text.encode("utf-8")
return {
"raw": text,
"raw_sha256": hashlib.sha256(raw).hexdigest(),
"normalizer": "NFKC",
"normalized": unicodedata.normalize("NFKC", text),
}
a, b = evidence("ABC"), evidence("ABC")
assert a["normalized"] == b["normalized"]
assert a["raw"] != b["raw"]
assert a["raw_sha256"] != b["raw_sha256"]
assert evidence("")["normalized"] == ""
print("original evidence preserved across normalization")
摘要用于关联内容,不证明上传者身份,也不识别恶意意图。这个例子没有翻译或语言模型,只验证了原始差异能被保留下来。
测试集要包含合法的差异
把全角、组合音标、表情和正常多语言工单放入回归集,观察检索是否改善、展示是否被破坏。安全测试再独立记录哪些输入导致越权动作,不能用关键词命中数量替代。
本例没有验证多语言注入识别率。部署时应记录unicodedata.unidata_version。Unicode对已赋码字符有规范化稳定性要求,但旧运行时可能不认识后续新增字符,不能省略输入范围和兼容测试。
博客探讨Unicode规范化(特别是NFKC)在多语言输入处理中的局限性,强调规范化不等于语义等价或安全判定。提出原文、规范化副本、摘要三者分离的实践方案,确保可审计性与证据保全;指出零宽字符删除、强制翻译等操作可能破坏语义或排版,并警示不可用关键词匹配替代权限检查。内容涵盖Python unicodedata实现、SHA-256摘要用途及兼容性测试要求。

372

被折叠的 条评论
为什么被折叠?



