使用不同的UTF-8编码测试视觉上相同的字符的相等性。 (日本)

时间:2017-08-01 21:18:14

标签: python string encoding utf-8 difflib

在我的项目中,我需要处理许多不同的语言,其中一种是日语。 (我自己不说)。

我需要比较两个字符串,看看它们是否相等。一个字符串来自我的计算机上的文件名,另一个字符串来自该确切文件的下载链接。这两个字符串应该是相同的。

原来相同的字符可以用不同的方式编码。

查看字符,它可以用两种方式编码。

  1. \xe3\x83\x90
  2. \xe3\x83\x8f\xe3\x82\x99
  3. 2号实际上是一个和一个,它们会产生相同的字符。因此,即使它们应该相等,一些字符串也会被认为是不同的。 Python告诉我

      

    ネバーランド

    不同
      

    ネバーランド

    我尝试过的事情:

    • 我没有检查确切的相等性,而是尝试使用相似性:

      difflib.SequenceMatcher(None, string1, string2).ratio()遗憾的是,这不够精确。我也试过配置垃圾,但我不能让它足够精确。

    • 搞乱解码和编码功能,希望它会神奇地消失。

    我看到有些类似的问题,但没有好的解决方案,我担心没有,除非我手动过滤掉这些特殊情况。

1 个答案:

答案 0 :(得分:0)

归一化为其组合形式。但是使用unicode s,当然不是UTF-8。

>>> u'ネバーランド' == u'ネバーランド'
False
>>> unicodedata.normalize('NFC', u'ネバーランド') == u'ネバーランド'
True