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 时遇到错误。
对于你们中的一些人来说,这可能是一个非常基本的问题,但在现场环境中却让我很头疼。
我有一个基于 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 时遇到错误。