Google 应用引擎:从表单中获取字符串

Google app engine: get string from a form

我有以下 google 应用引擎系统:

model.py:

# -*- coding: utf-8 -*-
#!/usr/bin/env python2.7

class SignUp(ndb.Model):
    ...
    category  = ndb.StringProperty()
    ...

html:

<meta charset="utf-8">
...
<form ...>
  ...
  <input type=radio name=category value=論文>論文
  ...

main.py:

# -*- coding: utf-8 -*-
#!/usr/bin/env python2.7

...
signUp = SignUP()
...
signUp.category = self.request.get('category')
if signUp.category=='論文':
    ...

上面单选输入的值为汉字。当 运行 时,我收到有关 if 语句的错误消息:

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

问题是什么?

您可能正在将 str 与 unicode 对象进行比较,您必须确保它们都是 unicode。

这是 unicode 和 str 的示例:

In [11]: type("hello".decode('utf-8'))
Out[11]: unicode

In [12]: type("hello")
Out[12]: str

告诉python您希望'論文'被解释为unicode字符串,例如:

if signUp.category == u'論文':

注意添加的 u.

现在你将一个 unicode 字符串与一个 unicode 字符串进行比较,你不会得到那个警告,并且字符串将评估为相等(当 signUp.category 实际上是“论文”时,当然).

import hashlib

像这样使用 hashlib:

signUp.category = self.request.get('category')
if signUp.category==hashlib.sha1('論文'.encode('utf-8')):