如何防止 Latin1 字符的 Unicode 表示?

How to prevent Unicode representation for Latin1 characters?

如何防止 Flask 返回拉丁字符作为 Unicode 表示?例如,对于这种字符:http://graphemica.com/%C3%91

我的 FlaskApp 在 MySQL 数据库中执行 SELECT,逐行检索,将它们添加到列表中,将列表存储到字典中,最后返回 JSON .

FlaskAPP

@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数据

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)

JSON


有人知道怎么解决吗?

提前致谢;)

"Ñ""\u00d1" json 字符串表示相同的 U+00D1 Unicode 字符:

>>> import json
>>> json.loads(u'"Ñ"') == json.loads(u'"\u00d1"')
True

注意:反斜杠被转义,因为它在 Python 字符串文字中也很特殊。

避免ascii编码json,set JSON_AS_ASCII to False:

By default Flask serialize object to ascii-encoded JSON. If this is set to False Flask will not encode to ASCII and output strings as-is and return unicode strings. jsonify will automatically encode it in utf-8 then for transport for instance.

示例:

#!/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": "Ñ"
}

@Hareendra Chamara Philips 在 中建议:

Alternatively, if some one is using config.py and doing application.config.from_pyfile('config.py') in __init__.py, you can use JSON_AS_ASCII = False in the config.py.