JSON Umlaute

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nvidia11
User
Beiträge: 11
Registriert: Montag 8. Dezember 2014, 00:29

dict = {}
dict[u'Züge'] = 0

json.dumps(dict, file, ensure_ascii=false)

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 2: ordinal not in range(128)

wie kann man das beheben?

ich möchte, dass man später im File das ü sieht!
BlackJack

@nvidia11: Vielleicht zeigst Du erst einmal den tatsächlichen Quelltext mit dem dazu passenden kompletten Traceback. `dumps()` nimmt nämlich keine Datei als Argument und `false` dürfte einen `NameError` ergeben. Und ich *rate* jetzt mal dass das eigentliche Problem gar nicht vom `dumps()` kommt, sondern von dem Versuch eine Unicode-Zeichenkette mit ``print`` auszugeben ohne die vorher entsprechend dem zu kodieren was das Programm auf der anderen Seite erwartet. Das hätte dann nichts mit JSON zu tun.
nvidia11
User
Beiträge: 11
Registriert: Montag 8. Dezember 2014, 00:29

Ja srry :D

Code: Alles auswählen

# -*- coding: utf-8 -*-
import json
from collections import OrderedDict

fdata = OrderedDict()
fdata[u"Züge"] = 0#data
fdata[u"Bahnhöfe"] = 0#train_stations

with open("/Users/user/Desktop/Try/trains.json", "w") as outfile:
    json.dump(fdata, outfile, indent=2, ensure_ascii=False)
Es liegt am OrderedDict!!
Mit einem normalen Dict funktioniert es ohne Fehler.
Zuletzt geändert von Anonymous am Samstag 31. Januar 2015, 00:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@nvidia11: Das liegt garantiert nicht am OrderedDict. Mit ensure_ascii=False liefert json einen Unicode-String und der Nutzer muß selbst dafür sorgen, dass der richtig codiert geschrieben wird.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

nvidia11 hat geschrieben:Es liegt am OrderedDict!!
Nein, das liegt daran, dass du die Datei mit dem falschen Encoding öffnest. Ergänze beim open als Parameter und Wert encoding='UTF-8' und alles wird gut.
nvidia11
User
Beiträge: 11
Registriert: Montag 8. Dezember 2014, 00:29

ok das hat geklappt.
smaligardezi
User
Beiträge: 4
Registriert: Montag 6. September 2021, 07:21

data_file = open('intents.json').read()
intents = json.loads(data_file)
Intents hat deutsche Umlaute und diese werden in meinem Chatbot nicht korrekt angezeigt.
Ich Danke für die Hilfe.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@smaligardezi: bitte mach für ein neues Thema einen neuen Thread auf.
Es handelt sich wahrscheinlich um ein Problem Deines Chatbots und nicht um ein JSON-Problem. Daher brauchen wir auch mehr Informationen und Code über Deinen Chatbot.

Dateien müssen auch wieder geschlossen werden, am besten mit Hilfe des with-Statements. Json-Dateien am besten binär öffnen, dann kümmert sich json um das Encoding. `load` statt `loads` benutzen:

Code: Alles auswählen

with open('intents.json', 'rb') as file:
    intents = json.load(file)
smaligardezi
User
Beiträge: 4
Registriert: Montag 6. September 2021, 07:21

ok, Danke
smaligardezi
User
Beiträge: 4
Registriert: Montag 6. September 2021, 07:21

Das hat damit geklappt , ich bin sehr sehr echt Dankbar , nur zum lernen was ist 'rb' ?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du mal in die Dokumentation von Open geschaut, um dir dieses frage vielleicht selbst zu beantworten?
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

rb steht für "richtig beeindruckend". In diesem Modus erhält open() gewisse Spezialfähigkeiten. 😇

Sollte natürlich ein Scherz sein. Lies die Doku auf der Python-Webseite oder befrage deine Suchmaschine.
Antworten