簡體   English   中英

utf-8中的python jsonify字典

[英]python jsonify dictionary in utf-8

我想將 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()執行相同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 不是 Javascript 的\
,並且在禁用 ASCII 安全編碼時, U+2028 和 U+2029 分隔符不會轉義為\
\
序列。

如果您仍然想使用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

#我希望這有幫助

就我而言,上述解決方案是不夠的。 (在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM