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

Testing equality for visually identical characters with different UTF-8 encodings. (Japanese)

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

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

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

看字符ba,可以有两种编码方式

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

数字 2 实际上是 在一起,结果是相同的字符。因此,一些字符串将被认为是不同的,即使它们应该相等。 Python 告诉我

ネバーランド

不一样

ネバーランド

我尝试过的事情:

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

归一化为组合形式。但是用unicodes操作,当然不是UTF-8.

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