我使用Flask运行RESTful服务并发现,当值作为参数传递时,Unicode字符未正确传递。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
...
@app.route('/search/<query>')
def Search(query):
result = { "result": query }
return jsonify(result), 200
当我使用带有URL的REST客户端调用服务时......
http://localhost/search/zürich
...输出如下:
{
"result": "z\ufffdrich"
}
对查询字符串进行硬编码时,如下所示:
@app.route('/search/<query>')
def Search(query):
result = { "result": "Zürich" }
return jsonify(result), 200
...输出正确编码:
{
"result": "Zürich"
}
所以我深入研究了Flask config options设置,并将options参数'JSON_AS_ASCII'设置为false。
默认情况下,Flask将对象序列化为ascii编码的JSON。如果设置为False,Flask将不会编码为ASCII并输出字符串as-is并返回unicode字符串。 jsonify将自动将其编码为utf-8,然后进行传输。
这是Flask中的错误还是我在Flask配置设置中遗漏了什么?
答案 0 :(得分:0)
此文档表示如果
app.config['JSON_AS_ASCII'] = False
输出将是unicode。
所以它应设置为True
以获得ASCII输出,这就是你想要的。