我想将 json 数据转换为 utf-8
我有一个清单my_list = []
然后许多像这样将unicode值附加到列表中
my_list.append(u'ტესტ')
return jsonify(result=my_list)
它得到
{
"result": [
"\u10e2\u10d4\u10e1\u10e2",
"\u10e2\u10dd\u10db\u10d0\u10e8\u10d5\u10d8\u10da\u10d8"
]
}
使用以下配置添加 UTF-8 支持:
app.config['JSON_AS_ASCII'] = False
请改用标准库json
模块,并ensure_ascii
在编码时将关键字参数设置为 False,或者对以下内容执行相同操作flask.json.dumps()
:
>>> data = u'\u10e2\u10d4\u10e1\u10e2'
>>> import json
>>> json.dumps(data)
'"\\u10e2\\u10d4\\u10e1\\u10e2"'
>>> json.dumps(data, ensure_ascii=False)
u'"\u10e2\u10d4\u10e1\u10e2"'
>>> print json.dumps(data, ensure_ascii=False)
"ტესტ"
>>> json.dumps(data, ensure_ascii=False).encode('utf8')
'"\xe1\x83\xa2\xe1\x83\x94\xe1\x83\xa1\xe1\x83\xa2"'
请注意,您仍然需要将结果显式编码为 UTF8,因为在这种情况下dumps()
函数会返回一个unicode
对象。
您可以通过在 Flask 应用程序配置中设置为 Falsejsonify()
将其设为默认值(并再次使用) 。JSON_AS_ASCII
警告:不要在非 ASCII 安全的 JSON 中包含不受信任的数据,然后插入 HTML 模板或在 JSONP API 中使用,因为这样可能导致语法错误或打开跨站点脚本漏洞。这是因为JSON 不是 Javascript 的严格子集,并且当禁用 ASCII 安全编码时,U+2028 和 U+2029 分隔符不会转义为\u2028
和\u2029
序列。
如果您仍然想使用烧瓶的 json 并确保 utf-8 编码,那么您可以执行以下操作:
from flask import json,Response
@app.route("/")
def hello():
my_list = []
my_list.append(u'ტესტ')
data = { "result" : my_list}
json_string = json.dumps(data,ensure_ascii = False)
#creating a Response object to set the content type and the encoding
response = Response(json_string,content_type="application/json; charset=utf-8" )
return response
#我希望这有帮助
就我而言,上述解决方案还不够。(在 GCP App Engine 柔性环境中运行烧瓶)。我最终做了:
json_str = json.dumps(myDict, ensure_ascii = False, indent=4, sort_keys=True)
encoding = chardet.detect(json_str)['encoding']
json_unicode = json_str.decode(encoding)
json_utf8 = json_unicode.encode('utf-8')
response = make_response(json_utf8)
response.headers['Content-Type'] = 'application/json; charset=utf-8'
response.headers['mimetype'] = 'application/json'
response.status_code = status