在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非常感谢。这很像一个魔杖。那很有魅力