Unicode 字符串比较被解释为不相等(Python/Django 应用程序)

Unicode string comparison being interpreted as unequal (Python/Django app)

对于你们中的一些人来说,这可能是一个非常基本的问题,但在现场环境中却让我很头疼。

我有一个基于 Django 的社交网站,除此之外,我还在单独的文件(称为 verified.py)中维护用户名列表,如下所示:

names = ['name1', 'name2', 'name3', 'name4',]

这些用户名在我的网站上得到特殊对待(例如徽章)。有时,用户的用户名中有特殊的非 ASCII 字符,例如Š0nîКa。如果我尝试在上面的列表中包含此类用户名,new relic 会显示错误率上升到 100%;异常是:exceptions:SyntaxError: Non-ASCII character '\xc5' in file /app/verified.py on line 1, but no encoding declared;

我阅读了附带的 PEP,我要在顶部添加一个神奇的行:# -- coding: utf-8 -- 我这样做了,但是发生以下警告:

在 Unicode 警告之后:Unicode 相等比较未能将两个参数转换为 Unicode - 将它们解释为不相等 '==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),

在 SO 中环顾四周,并没有明确指出如何处理这个问题。有人可以帮忙吗?

使用 u'' 前缀将名称标记为 unicode 字符串,例如u'Š0nîКa'

在没有 u'' 前缀的 Python 2 中,它们被视为字节字符串,并且警告解释说 Python 在尝试将它们转换为 unicode 时遇到错误。