无法处理unicode字符串



我试图使用voluptuous来验证来自HTTP请求的JSON输入。但是,它似乎不能很好地处理unicode字符串。

from voluptuous import Schema, Required
from pprint import pprint
schema = Schema({
    Required('name'): str,
    Required('www'): str,
})
data = {
    'name': 'Foo',
    'www': u'http://www.foo.com',
}
pprint(data)
schema(data)
上面的代码会产生以下错误:
 voluptuous.MultipleInvalid: expected str for dictionary value @ data['www']

但是,如果我从URL中删除u符号,一切都可以正常工作。这是一个bug还是我做错了?

p。我使用python 2.7,如果它有任何关系。

Python 2.7中有两种字符串类型:strunicode。在Python 2.7中,str类型不是Unicode字符串,它是一个字节字符串。

所以值u'http://www.foo.com'确实不是str类型的实例,你会得到那个错误。如果你希望在Python 2.7中同时支持str和Unicode字符串,你需要将模式更改为:

from voluptuous import Any, Schema, Required
schema = Schema({
    Required('name'): Any(str, unicode),
    Required('www'): Any(str, unicode),
})

或者,为了简单起见,如果您总是接收Unicode字符串,那么您可以使用:

schema = Schema({
    Required('name'): unicode,
    Required('www'): unicode,
})

最新更新