🐍 Python
ensure_ascii で日本語などの非ASCII文字の扱いを制御する
json.dumps()は既定で、日本語などのASCII範囲外の文字を\uXXXX形式にエスケープします。これはJSONとして正しい表現ですが、人間が見ると読みにくくなります。ensure_ascii=Falseを指定すると、元の文字のまま出力できます。
json.dumps(obj) # 既定(ensure_ascii=True): 非ASCII文字を\uXXXX形式にエスケープ
json.dumps(obj, ensure_ascii=False) # 非ASCII文字をそのまま出力
import json
data = {"name": "田中"}
print(json.dumps(data))
# {"name": "\u7530\u4e2d"} ← デフォルトはエスケープされる
import json
data = {"name": "田中"}
print(json.dumps(data, ensure_ascii=False))
# {"name": "田中"} ← 元の文字のまま出力される
# ensure_ascii=Trueは省略時のデフォルトと同じ結果になる
import json
data = {"name": "田中"}
print(json.dumps(data, ensure_ascii=True) == json.dumps(data))
# True
ensure_asciiの値による違い
True(既定)- 非ASCII文字を
\uXXXX形式のエスケープシーケンスに変換する。どの環境・文字コードでも安全に扱えるが、人間には読みにくい False- 非ASCII文字をそのまま出力する。人間が読みやすい反面、出力先のファイル・通信路が対応する文字コード(通常UTF-8)を扱える前提が必要
💡 AIコードレビュー観点:どちらもJSONとしては等価
\u7530のようなエスケープ表現と、実際の「田」という文字は、JSONの仕様上は完全に等価であり、json.loads()で読み込めばどちらも同じ文字列に戻ります。「日本語がエスケープされて読めない」という見た目上の問題に対して、AIが生成したコードを「壊れている」と誤解しないよう注意しましょう。人間が読むログやデバッグ出力に使うならensure_ascii=False、外部システムとの互換性を優先するなら既定のままが無難です。