如何防止Flask将拉丁字符作为Unicode表示返回?例如,对于此类字符:http://graphemica.com/%C3%91
我的FlaskApp在MySQL数据库中执行SELECT,逐行检索,将它们添加到列表中,将列表存储到字典中,最后返回JSON。
@app.route("/json")
def show_json():
avisos_dict = {}
records_list = []
query = "SELECT * FROM tjs_stage.avisos"
cur.execute(query)
con.commit()
records = cur.fetchall()
for row in records:
records_list.append(row)
avisos_dict['avisos'] = records_list
return jsonify(avisos_dict)
mysql> SELECT * FROM tjs_stage.avisos; +----+---------------------+---------------------------------+---------------------+---------------------+ | Id | Titulo | Aviso | Creacion | Modificacion | +----+---------------------+---------------------------------+---------------------+---------------------+ | 1 | PRIMERO AVISO | MAÑANA EMPIEZAM VACACIONES | 2016-04-06 18:12:52 | 2016-04-06 18:12:52 | | 64 | Aviso de Vacaciones | Mañana empezam las vacaciones! | 2016-05-30 17:19:17 | 2016-05-30 17:19:17 | +----+---------------------+---------------------------------+---------------------+---------------------+ 2 rows in set (0.00 sec)
有谁知道如何解决这个问题?
提前致谢;)
答案 0 :(得分:3)
$this->addElement('text', 'domain', array(
'label' => $this->getTranslator()->_('Your domain'),
'attribs' => array(
'maxlength' => 200,
'size' => 30
),
'validators' => array(),
'filters' => array(),
'required' => TRUE,
'decorators' => array('Errors',
array('HtmlTag', array('tag' => 'span', 'class' => 'custom'))
),
));
和"Ñ"
json字符串表示相同的U+00D1 Unicode字符:
"\u00d1"
注意:反斜杠是转义的,因为它在Python字符串文字中也是特殊的。
要避免使用ascii编码的json,set JSON_AS_ASCII
to False
:
默认情况下,Flask将对象序列化为ascii编码的JSON。如果是这样的话 设置为False Flask不会编码为ASCII并按原样输出字符串 并返回unicode字符串。 jsonify将自动对其进行编码 然后utf-8用于运输。
示例:
>>> import json
>>> json.loads(u'"Ñ"') == json.loads(u'"\\u00d1"')
True
运行服务器(假设您将其保存到#!/usr/bin/env python
from flask import Flask, jsonify
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/')
def unicode_json():
return jsonify({'text': u'\xd1'})
if __name__ == '__main__':
app.debug = True
app.run()
):
app.py
测试它:
$ python -mpip install flask -U
$ python app.py
输出:
$ python -mpip install httpie
$ http --pretty=none :5000
或者,如果有人使用
HTTP/1.0 200 OK Content-Length: 18 Content-Type: application/json Date: Tue, 31 May 2016 14:54:20 GMT Server: Werkzeug/0.10.4 Python/2.7.9 { "text": "Ñ" }
并在config.py
中执行application.config.from_pyfile('config.py')
,则您可以在__init__.py
中使用JSON_AS_ASCII = False
。