Не должно быть проблем с точными совпадениями при правильном декодировании входных строк (которые вы получаете из параметров веб-запроса) и правильном кодировании выходных строк (которые вы сохраняете в хранилище данных GAE) в Unicode.
I 'мы попробовали этот фрагмент в интерактивной консоли GAE SDK, и он работает:
from google.appengine.ext import db
class names(db.Model):
name = db.StringProperty(multiline=True)
some_name = 'Beyonc\xc3\xa9'.decode('utf-8')
# same as: some_name = u'Beyoncé'
# same as: some_name = u'Beyonc\u00e9'
n = names(name=some_name)
n.put()
q = names.all().filter('name =', some_name)
print q.get().name.encode('utf-8')
# prints Beyoncé
Вы должны отладить то, что является необработанным значением сравниваемых строк, то есть строки, сохраненной в хранилище, и переданной строки.к запросу.
Я рекомендую прочитать эту статью о Юникоде Джоэла Спольски и Python Unicode HOWTO , если вы не знакомы с обработкой строк Юникода.
В дополнение к этому, если вы выполняете поисковые запросы, которые должны соответствовать символам Unicode, таким как u'é'
, когда ввод 'e'
, рассмотрите возможность сравнения нормализованных строк:
some_name = u'El S\u00faper Cl\u00e1sico' # El Súper Clásico
normalized_name = unicodedata.normalize('NFKD', some_name).encode('ascii', 'ignore') # El Super Clasico