python jsonify字典在utf-8

ghhaqwfi  于 2023-05-21  发布在  Python
关注(0)|答案(5)|浏览(180)

我想把JSON数据导入UTF-8
我有一个列表my_list = []
然后many将unicode值追加到列表中,如下所示

my_list.append(u'ტესტ')

return jsonify(result=my_list)

它会变得

{
"result": [
"\u10e2\u10d4\u10e1\u10e2",
"\u10e2\u10dd\u10db\u10d0\u10e8\u10d5\u10d8\u10da\u10d8"
]
}
dfuffjeb

dfuffjeb1#

使用以下配置添加UTF-8支持:

app.config['JSON_AS_ASCII'] = False
taor4pac

taor4pac2#

使用标准库json module,并在编码时将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应用配置中将JSON_AS_ASCII设置为False来将其设置为默认值(并再次使用jsonify())。

警告:不要在不符合ASCII安全的JSON中包含不受信任的数据,然后插入HTML模板或在JSONP API中使用,因为这样可能会导致语法错误或打开跨站点脚本漏洞。这是因为JSON is not a strict subset of Javascript和禁用ASCII安全编码时,U+2028和U+2029分隔符将不会转义为\u2028\u2029序列。

wlsrxk51

wlsrxk513#

如果你仍然想使用flask的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

我希望这能帮上忙

2lpgd968

2lpgd9684#

在我的情况下,上述解决方案是不够的。(在GCP App Engine灵活环境中运行flask)。最后我做了:

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
qgzx9mmu

qgzx9mmu5#

在版本2.3中更改:删除了JSON_AS_ASCII、JSON_SORT_KEYS、JSONIFY_MIMETYPE和JSONIFY_PRETTYPRINT_REGULAR。默认的app.json提供程序具有等效的属性。
现在,我们可以像这样更改此行为:

from flask import json

json.provider.DefaultJSONProvider.ensure_ascii = False

相关问题