エラー概要
- Django(Python)のコードで、
JsonResponse
を使って以下のように実装しておくとします。
return JsonResponse({'status': 'errorです'})
- しかし、ログでは以下のように表示されてしまいます。文字化け?みたいな現象が起きています。
{"status": "error\u3067\u3059"}
原因
- 調べてみると、これは
JsonResponse
がUnicodeエスケープシーケンスを自動的にエンコードするために発生するエラーらしい。 - Unicode文字列をエンコードしないように指定することで解決できます。
解決策
- 以下のように変更することで、日本語の文字列が正しく表示されるようになります。
return JsonResponse({'status': 'errorです'}, json_dumps_params={'ensure_ascii': False})
-
json_dumps_params
は、Pythonのjson.dumps()
関数に渡すためのパラメーターを指定するためのオプションです。 -
ensure_ascii
はデフォルトではTrue
ですがFalse
に設定することで、非ASCII文字をエスケープシーケンスではなく、そのままのUnicode文字列としてシリアル化するため、文字化けが解決されます。