Python же char не равен

У меня есть текст в моей базе данных. Я отправляю текст из xhr на мой взгляд. Функция find не находит некоторые символы Юникода.

Я хочу найти выделенный текст, используя:

text.find(selection)

но иногда переменная 'selection' содержит такой символ:

ę  # in xhr unichr(281)

тогда как в переменной 'text' было:

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

Это просто разные формы одного и того же. Как заставить .find работать здесь более надежно?

Ответ 1

Здесь unicodedata.normalize может вам помочь.

В принципе, если вы нормализуете данные, поступающие из db, и нормализуете свой выбор в той же форме, вы должны иметь лучший результат при использовании str.find, str.__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 означает форму, составленную с использованием обычной формы. Вы можете прочитать здесь для описания других возможных форм.