如何防止 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
.
如何防止 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 doingapplication.config.from_pyfile('config.py')
in__init__.py
, you can useJSON_AS_ASCII = False
in theconfig.py
.