一次由字符串在Python与Mysql比较结果不一致导致的问题解决

文章讨论了在MySQL中两个看似相同的‘5’字符因编码不同导致的问题,这在Python中尤为明显。为了解决这个问题,建议使用Unicode规范化工具,如NFC或NFKC进行字符串处理,确保在比较时达到一致的结果。NFC关注组合形式,而NFKC更注重兼容性和一致性。字符规范化可能导致字符变化,需按需求选择合适的方法。
摘要由CSDN通过智能技术生成

注意,这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字符的多种表示形式,以便在比较和处理字符时获得一致的结果。

区别在于它们处理一些特定字符的方式:

  1. NFC(Normalization Form C):该形式将字符转换为规范的组合形式,也称为"Canonical Composition"。它会将可能的组合字符序列替换为等效的单个组合字符。

  2. NFKC(Normalization Form KC):该形式不仅将字符转换为规范的组合形式,还将字符进行兼容性(compatibility)分解和组合。这意味着它会将兼容字符映射到更常见或标准的等效字符。

简而言之,NFC主要关注字符的组合形式,而NFKC除了组合形式,还处理字符的兼容性和一致性。NFKC的处理可能更严格,会更大程度地转换和标准化字符。

选择使用NFC还是NFKC取决于具体的需求和应用场景。在某些情况下,NFC可能足够满足需要;而在其他情况下,需要更广泛的字符转换和规范化,可以选择NFKC。

请注意,使用NFC或NFKC进行字符规范化时,可能会导致字符的一些细微变化或差异。因此,确保在处理字符规范化时理解和处理您的具体需求。

以下是经过字符串规范化处理后的比较结果

 

问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值