使用不同的 UTF-8 编码测试视觉上相同的字符是否相等。 (日本人)
Testing equality for visually identical characters with different UTF-8 encodings. (Japanese)
在我的项目中,我需要处理许多不同的语言,其中之一是日语。 (我自己不会说)
我需要比较两个字符串看它们是否相等。一个字符串来自我计算机上的文件名,另一个字符串来自该确切文件的下载 link。这 2 个字符串应该相同。
原来相同的字符可以用不同的方式或类似的方式编码。
看字符ba,可以有两种编码方式
\xe3\x83\x90
\xe3\x83\x8f\xe3\x82\x99
数字 2 实际上是 ハ 和 ゙ 在一起,结果是相同的字符。因此,一些字符串将被认为是不同的,即使它们应该相等。 Python 告诉我
ネバーランド
与
不一样
ネバーランド
我尝试过的事情:
我尝试使用相似性来代替检查是否完全相等:
difflib.SequenceMatcher(None, string1, string2).ratio()
不幸的是,这不够精确。我也试过配置垃圾,但我不能让它足够精确。
乱搞解码和编码功能,希望它会神奇地消失。
我见过一些类似的问题,但没有很好的解决方案,除非我手动过滤掉这些特殊情况,否则恐怕会有 none。
归一化为组合形式。但是用unicode
s操作,当然不是UTF-8.
>>> u'ネバーランド' == u'ネバーランド'
False
>>> unicodedata.normalize('NFC', u'ネバーランド') == u'ネバーランド'
True
在我的项目中,我需要处理许多不同的语言,其中之一是日语。 (我自己不会说)
我需要比较两个字符串看它们是否相等。一个字符串来自我计算机上的文件名,另一个字符串来自该确切文件的下载 link。这 2 个字符串应该相同。
原来相同的字符可以用不同的方式或类似的方式编码。
看字符ba,可以有两种编码方式
\xe3\x83\x90
\xe3\x83\x8f\xe3\x82\x99
数字 2 实际上是 ハ 和 ゙ 在一起,结果是相同的字符。因此,一些字符串将被认为是不同的,即使它们应该相等。 Python 告诉我
ネバーランド
与
不一样ネバーランド
我尝试过的事情:
我尝试使用相似性来代替检查是否完全相等:
difflib.SequenceMatcher(None, string1, string2).ratio()
不幸的是,这不够精确。我也试过配置垃圾,但我不能让它足够精确。乱搞解码和编码功能,希望它会神奇地消失。
我见过一些类似的问题,但没有很好的解决方案,除非我手动过滤掉这些特殊情况,否则恐怕会有 none。
归一化为组合形式。但是用unicode
s操作,当然不是UTF-8.
>>> u'ネバーランド' == u'ネバーランド'
False
>>> unicodedata.normalize('NFC', u'ネバーランド') == u'ネバーランド'
True