Python相同的char不等于

时间:2016-03-21 17:15:27

标签: python unicode

我的数据库中有文字。我从xhr发送一些文字给我看。函数find找不到一些unicode字符。

我想使用以下方法找到所选文字:

text.find(selection)

但有时可变的选择'包含这样的字符:

ę  # in xhr unichr(281)

而在变量' text'有:

ę  # in db has two chars unichr(101) + unichr(808)

它们只是同一件事的不同形式。如何让.find在这里更可靠地工作?

1 个答案:

答案 0 :(得分:13)

此处unicodedata.normalize可能会对您有所帮助。

基本上,如果您对来自数据库的数据进行规范化,并将您的选择标准化为相同的表单,则在使用str.findstr.__contains__时(in)应该会有更好的结果,str.index和朋友。

>>> u1 = chr(281)
>>> u2 = chr(101) + chr(808)
>>> print(u1, u2)
ę ę
>>> u1 == u2
False
>>> unicodedata.normalize('NFC', u2) == u1
True

NFC代表 Normal Form Composed 表单。您可以阅读here以获取其他可能形式的描述。