2017-08-01 47 views
1

在我的项目中,我需要处理许多不同的语言,其中之一是日语。 (我自己不说)。使用不同的UTF-8编码测试视觉相同的字符的相等性。 (日语)

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

原来相同的字符可以用不同的方式编码或类似的东西。

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

  1. \xe3\x83\x90
  2. \xe3\x83\x8f\xe3\x82\x99

数2实际上是一种一起,这导致在相同的字符。正因为如此,有些字符串会被认为是不同的,即使它们应该是平等的。 Python是告诉我,

ネバーランド

是不一样的

ネバーランド

事情我已经尝试:

  • 而不是检查确切的平等我尝试使用相似性:

    difflib.SequenceMatcher(None, string1, string2).ratio()这不幸的是不够精确。我也尝试过配置垃圾,但我无法做到足够精确。

  • 乱七八糟的解码和编码功能,希望它只会神奇消失。

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

回答

0

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

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