47

jsonデータをutf-8に取り込みたい

私はリストを持っていますmy_list = []

そして、多くの人がこのようにリストにユニコード値を追加します

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

return jsonify(result=my_list)

そしてそれは

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

4 に答える 4

92

次の構成を使用して、UTF-8サポートを追加します。

app.config['JSON_AS_ASCII'] = False
于 2016-09-18T19:12:05.970 に答える
28

代わりに標準ライブラリ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"'

その場合、関数はオブジェクトをdumps()返すため、結果をUTF8に明示的にエンコードする必要があることに注意してください。unicode

Flaskアプリの設定でFalseに設定することで、これをデフォルトにする(そしてjsonify()再度使用する)ことができます。JSON_AS_ASCII

警告:ASCIIセーフではない信頼できないデータをJSONに含めないでください。その後、HTMLテンプレートに補間するか、JSONP APIで使用してください。これにより、構文エラーが発生したり、クロスサイトスクリプティングの脆弱性が発生したりする可能性があります。これは、JSONがJavascriptの厳密なサブセットではなく、 ASCIIセーフエンコーディングを無効にすると、U+2028およびU+2029セパレーターがエスケープされないため\u2028です\u2029

于 2013-02-13T12:49:42.573 に答える
9

それでも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

#これがお役に立てば幸いです

于 2016-10-07T14:38:38.437 に答える
0

私の場合、上記の解決策では不十分でした。(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
于 2018-01-08T13:41:20.133 に答える