【Flask】日本語のレスポンスが文字化けする

この記事は約3分で読めます。

こんにちは、EMすずきです。

今回は『Flaskで日本語のレスポンスが文字化けする問題』を解決する方法のメモです。

元のコード

from flask import Flask, jsonify

app = Flask(import_name=__name__)

@app.route('/')
def index():
    return jsonify({
        'message': 'こんにちは、世界!'
    })

if __name__ == '__main__':
    app.run(
        debug=True,
        host='127.0.0.1',
        port=8000,
    )
{
  "message": "\u3053\u3093\u306b\u3061\u306f\u3001\u4e16\u754c\uff01"
}

解決方法

よく出てくるのはこのコード

app.config['JSON_AS_ASCII'] = False

これは古い書き方で、現在のバージョン(2.3.2)では以下のように書きます。

app.json.ensure_ascii = False
from flask import Flask, jsonify

app = Flask(import_name=__name__)
app.json.ensure_ascii = False

@app.route('/')
def index():
    return jsonify({
        'message': 'こんにちは、世界!'
    })

if __name__ == '__main__':
    app.run(
        debug=True,
        host='127.0.0.1',
        port=8000,
    )
{
  "message": "こんにちは、世界!"
}

参考

flask.json.provider.DefaultJSONProvider(app)

Replace non-ASCII characters with escape sequences. This may be more compatible with some clients, but can be disabled for better performance and size.

ASCII以外の文字をエスケープシーケンスに置き換えます。これは一部のクライアントとの互換性が高いかもしれませんが、パフォーマンスとサイズを向上させるために無効にすることができます。

タイトルとURLをコピーしました