2015-10-27 20 views
0

这对于你们中的一些人来说可能是一个相当基本的问题,但在实时环境中给我带来了一些很大的麻烦。Unicode字符串比较被解释为不相等(Python/Django应用程序)

我有一个基于Django的社交网站,其中除其他事项外,我还保持在一个单独的文件(verified.py调用)用户名的列表,像这样:

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

这些用户名获得特殊在我的网站上处理(例如徽章)。偶尔,用户在其用户名中具有特殊的非ASCII字符,例如, Š0nîКa。如果我尝试在上面的列表中包含这些用户名,新的文物显示错误率升至100%;例外情况是:例外:SyntaxError:第1行文件/app/verified.py中的非ASCII字符'\ xc5',但未声明编码;

我读此相伴的PEP,我在顶部加魔线:# - - 编码:UTF-8 - - 我这样做,但下面的警告发生了:

UnicodeWarning之后:Unicode等于比较无法将两个参数转换为Unicode - 将它们解释为不等于 '==':infix(10,lambda上下文,x,y:x.eval(上下文)== y.eval(上下文)),

环顾四周,并没有完全指出如何照顾这一点。任何人都可以帮忙吗?

回答

2

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

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

+0

真的吗?坚持下去,我会给它拍 –

+0

我猜你正在使用Python 2.7,对吧? –

+0

完美。而且在7分钟之前我无法接受您的答案:P –