将字符串与 python 中的 unicode 字符进行比较
Compare strings with unicode characters in python
这里是子串Ritē
我有两个字符串,一个来自zipfile
提取的文件名。我使用 filename.encode('cp437').decode('utf-8')
正确提取了所有路径。另一个是使用 plistlib.readPlist()
从 .plist
中读取的。两者都使用 print()
正确打印。但是,相比之下,它们并不相同。我试着在 utf-8
中对它们进行编码,这是它们的样子:
Rite\xcc\x84
Rit\xc4\x93
一个解释字符 e 和 - 在上面,另一个解释 'LATIN SMALL LETTER E WITH MACRON'
有没有人对此有任何建议,以便比较两个字符串?提前谢谢你
根据评论,这听起来像是您要查找的内容:
import unicodedata
foo = 'Rit\u0113'
bar = 'Rite\u0304'
print(foo, bar)
print(unicodedata.normalize('NFD', foo))
print(unicodedata.normalize('NFD', bar))
assert unicodedata.normalize('NFD', foo) == unicodedata.normalize('NFD', bar)
我选择了 NFD 作为表格,但您可能更喜欢 NFC。
这里是子串Ritē
我有两个字符串,一个来自zipfile
提取的文件名。我使用 filename.encode('cp437').decode('utf-8')
正确提取了所有路径。另一个是使用 plistlib.readPlist()
从 .plist
中读取的。两者都使用 print()
正确打印。但是,相比之下,它们并不相同。我试着在 utf-8
中对它们进行编码,这是它们的样子:
Rite\xcc\x84
Rit\xc4\x93
一个解释字符 e 和 - 在上面,另一个解释 'LATIN SMALL LETTER E WITH MACRON'
有没有人对此有任何建议,以便比较两个字符串?提前谢谢你
根据评论,这听起来像是您要查找的内容:
import unicodedata
foo = 'Rit\u0113'
bar = 'Rite\u0304'
print(foo, bar)
print(unicodedata.normalize('NFD', foo))
print(unicodedata.normalize('NFD', bar))
assert unicodedata.normalize('NFD', foo) == unicodedata.normalize('NFD', bar)
我选择了 NFD 作为表格,但您可能更喜欢 NFC。