注意,这2个 ‘5’ 其实不是同一个字符
但在mysql中,认为是同一个字符
异体字符产生的原因可能是前端录入信息的时候,切换到了一些奇怪的输入法,导致看起来是一个普通数字,实际上字符编码是不一致的
这就导致了,在python代码层无法对这两个字符串去重,由此导致了一些奇怪的逻辑问题
如何解决呢
需要使用字符串规范化工具做处理
在Python中,字符的相等性是基于Unicode码点进行比较的。对于Unicode码点超出ASCII范围(0-127)的字符,Python中的比较操作可能会导致不同的结果,尤其是在与MySQL等其他数据库进行比较时。
要使Python认为编号53和编号65301的字符是相等的,您可以进行字符规范化处理,将它们转换为统一的表示形式。一种常见的规范化方法是使用Unicode规范化形式 NFC(Normalization Form C)或 NFKC(Normalization Form KC)。
NFC(Normalization Form C)和NFKC(Normalization Form KC)都是Unicode字符规范化的形式,用于处理Unicode字符的多种表示形式,以便在比较和处理字符时获得一致的结果。
区别在于它们处理一些特定字符的方式:
-
NFC(Normalization Form C):该形式将字符转换为规范的组合形式,也称为"Canonical Composition"。它会将可能的组合字符序列替换为等效的单个组合字符。
-
NFKC(Normalization Form KC):该形式不仅将字符转换为规范的组合形式,还将字符进行兼容性(compatibility)分解和组合。这意味着它会将兼容字符映射到更常见或标准的等效字符。
简而言之,NFC主要关注字符的组合形式,而NFKC除了组合形式,还处理字符的兼容性和一致性。NFKC的处理可能更严格,会更大程度地转换和标准化字符。
选择使用NFC还是NFKC取决于具体的需求和应用场景。在某些情况下,NFC可能足够满足需要;而在其他情况下,需要更广泛的字符转换和规范化,可以选择NFKC。
请注意,使用NFC或NFKC进行字符规范化时,可能会导致字符的一些细微变化或差异。因此,确保在处理字符规范化时理解和处理您的具体需求。
以下是经过字符串规范化处理后的比较结果
问题解决