在python中将字符串与unicode字符进行比较

在python中将字符串与unicode字符进行比较,python,unicode,Python,Unicode,下面是子字符串Ritē 我有两个字符串,一个来自zipfile提取的文件名。我使用filename.encode('cp437').decode('utf-8')正确提取所有路径。另一个是使用plistlib.readPlist()从.plist读取的。使用print()可以正确打印这两个文件。然而,相比之下,它们并不相同。我试着在utf-8中对它们进行编码,下面是它们的样子: Rite\xcc\x84 Rit\xc4\x93 一个解释字符e,另一个解释字符为了比较这两个字符串,有人对此有什么

下面是子字符串
Ritē

我有两个字符串,一个来自
zipfile
提取的文件名。我使用
filename.encode('cp437').decode('utf-8')
正确提取所有路径。另一个是使用
plistlib.readPlist()
.plist
读取的。使用
print()
可以正确打印这两个文件。然而,相比之下,它们并不相同。我试着在
utf-8
中对它们进行编码,下面是它们的样子:

  • Rite\xcc\x84
  • Rit\xc4\x93

    一个解释字符e,另一个解释字符
    为了比较这两个字符串,有人对此有什么建议吗?先谢谢你

根据评论,听起来这就是你想要的:

导入Unicode数据
foo='Rit\u0113'
bar='Rite\u0304'
打印(foo,bar)
打印(unicodedata.normalize('NFD',foo))
打印(unicodedata.normalize('NFD',bar))
断言unicodedata.normalize('NFD',foo)=unicodedata.normalize('NFD',bar)

我选择了NFD作为表单,但您可能更喜欢。

根据评论,这似乎是您想要的:

导入Unicode数据
foo='Rit\u0113'
bar='Rite\u0304'
打印(foo,bar)
打印(unicodedata.normalize('NFD',foo))
打印(unicodedata.normalize('NFD',bar))
断言unicodedata.normalize('NFD',foo)=unicodedata.normalize('NFD',bar)

我选择NFD作为表单,但您可能更喜欢。

此评论并不完全清楚。你想发生什么?如果两个字符串不同,那么它们在python中会比较为不等。我的意思是两个字符串相同,但编码方式不同(一个是zipfile,另一个是plistlib)。我的目标是能够匹配两者。你能提供原始数据文件的链接吗?假设您将它们都视为Ritē,那么这些unicode翻译是不正确的,这意味着您在某个地方使用了错误的编码来读取它们——我怀疑问题出在您的.encode('cp437')中。您希望使用
unicodedata
内置模块将两者转换为公共表示形式。如果我不使用'cp437',它将是这样的:仪式╠ä或在utf-8:Rite\xe2\x95\xa0\xc3\xa4中,此注释并不完全清楚。你想发生什么?如果两个字符串不同,那么它们在python中会比较为不等。我的意思是两个字符串相同,但编码方式不同(一个是zipfile,另一个是plistlib)。我的目标是能够匹配两者。你能提供原始数据文件的链接吗?假设您将它们都视为Ritē,那么这些unicode翻译是不正确的,这意味着您在某个地方使用了错误的编码来读取它们——我怀疑问题出在您的.encode('cp437')中。您希望使用
unicodedata
内置模块将两者转换为公共表示形式。如果我不使用'cp437',它将是这样的:仪式╠ä或在utf-8中:Rite\xe2\x95\xa0\xc3\xa4非常感谢。这很像一个魔杖。那很有魅力