【发布时间】:2018-03-12 15:27:52
【问题描述】:
我使用 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 设置中进行了挖掘,并将选项参数“JSON_AS_ASCII”设置为 false。
默认情况下,Flask 将对象序列化为 ascii 编码的 JSON。如果设置为 False Flask 将不会编码为 ASCII 并按原样输出字符串并返回 unicode 字符串。 jsonify 会自动将其编码为 utf-8,然后用于传输。
这是 Flask 中的错误还是我错过了 Flask 配置设置中的任何内容?
【问题讨论】:
-
我能够通过对查询字符串进行 urlencoding 来解决问题。因此,我将 URL 称为:localhost/search/Z%C3%BCrich,而不是 localhost/search/zürich。这解决了问题。
标签: python flask flask-restful