Pieters' Python 2 Workaround scheitert an einem Grenzfall:
d = {u'Schlüsselwort': u'Schlechte Kreditkarten'}
with io.open('dateiname', 'w', encoding='utf8') as json_datei:
daten = json.dumps(d, ensure_ascii=False).decode('utf8')
try:
json_datei.write(data)
except TypeError:
# Dekodieren der Daten zuerst in Unicode
json_datei.write(data.decode('utf8'))
UnicodeEncodeError: 'ascii' codec kann Zeichen u'\xe7' in Position 25 nicht codieren: Ordinal nicht im Bereich von 128
Es stürzte auf den .decode('utf8') Teil von Zeile 3 ab. Ich habe das Problem behoben, indem ich das Programm viel einfacher gemacht habe, indem ich diesen Schritt sowie die Sonderbehandlung von ASCII vermieden habe:
with io.open('dateiname', 'w', encoding='utf8') as json_datei:
daten = json.dumps(d, ensure_ascii=False, encoding='utf8')
json_datei.write(unicode(data))
cat dateiname
{"Schlüsselwort": "Schlechte Kreditkarten"}