性感无法处理 unicode 字符串?
voluptuous unable to handle unicode string?
我正在尝试使用 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
符号,一切正常。这是一个错误还是我做错了?
ps。如果与它有任何关系,我正在使用 python 2.7。
Python 2.7 中有两种字符串类型:str
和 unicode
。在 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,
})
我正在尝试使用 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
符号,一切正常。这是一个错误还是我做错了?
ps。如果与它有任何关系,我正在使用 python 2.7。
Python 2.7 中有两种字符串类型:str
和 unicode
。在 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,
})