XML Umlaute - Utf-8

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
diablo75
User
Beiträge: 30
Registriert: Dienstag 8. September 2009, 23:12

Hallo @ all,

ich habe ein kleines Problem mit der Formatierung von Umlauten(ä, ü, ö usw.).
Ich bekomme Kundendaten in Form einer XML Datei geliefert. Leider tanzt einer wieder mal aus der Reihe und
liefert die Daten in einer nicht konformen Art wie gewünscht.

Der Header :

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
und dann sehen die Umlaute so aus:

Code: Alles auswählen

<NATUERLICHE_PERSON Familienname="Sch�nbauer"
nach dem Umwandeln mit:

Code: Alles auswählen

def convert_in_utf_8(xmlfile):
    myFileIn = xmlfile
    myFileOu = 'utf_8.xml'

    #  open in binary mode ↓
    with open( myFileIn, 'rb') as f:
        root = ET.fromstring( f.read())
    tree = ET.ElementTree(root)
    tree.write(myFileOu, encoding='utf-8', xml_declaration=True)
    return True
in utf-8 schaut es dann so aus:

Code: Alles auswählen

<NATUERLICHE_PERSON Familienname="Sch�nbauer"
also auch nicht viel besser.

Kann mir wer erklären wie man das lösen kann??
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Erste Frage ist, wie sehen die Bytes der Datei wirklich aus?
XML unterstützt nativ verschiedene Encodings, also sollte es egal sein, in welchem Encoding die Datei gespeichert ist, solange die Angabe im Header stimmt.

Warum liest Du das XML so kompliziert?
Variablennamen werden komplett klein geschrieben.

Ansonsten sieht der Code richtig aus.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn Encoding und Bytes wirklich nicht zusammen passen, dann ist das kein XML, und damit verletzt der Kunde den Vertrag bzw. die Vereinbarung zum Datenaustausch. Nun kann es natuerlich sein, dass man daran nix aendern kann, weil der verantwortliche Entwickler auf deren Seite der Neffe des Chefs ist, und sich nix sagen laesst. Aber zumindest kommunizieren, dass die da etwas falsch machen, sollte man schon.
diablo75
User
Beiträge: 30
Registriert: Dienstag 8. September 2009, 23:12

Danke für die Infos.
Es hat sich nun herausgestellt, dass die XML Datei fehlerhaft war. Nun wurde mir eine neue geliefert und siehe da: alle Umlaute sind korrekt :-)

Damit stellt sich mir aber wieder eine neue Aufgabe: Wie kann ich überprüfen ob eine XML Datei fehlerhaft ist (wie oben z.B), damit ich mir sowas nicht in meine Datenbank einspiele??
(XML als String einlesen und nach komischen Zeichen suchen?)
diablo75
User
Beiträge: 30
Registriert: Dienstag 8. September 2009, 23:12

Sirius3 hat geschrieben: Donnerstag 4. November 2021, 14:03
Warum liest Du das XML so kompliziert?
Variablennamen werden komplett klein geschrieben.

Ansonsten sieht der Code richtig aus.
Den code hab ich mir aus dem Internet kopiert
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Allgemein gar nicht. Wenn die ein Encoding wie UTF-8 verwenden wuerden, waeren viele solcher Fehler vermeidbar, weil das recht spezifische Regeln hat, und eine versehentliche Fehlkodierung dadurch eher auffaellt. Aber wenn alles XML-konform ist, dann kann ¿ eben auch einfach der Name des Kindes von Elon Musk und Grimes sein. Bestenfalls kannst du auf eine Heuristik setzen, und nach Worten wie "fuer" (ich schreibe ohne Umlaute, weil meine Tastatur die nicht hat) oder aehnlichem suchen. Das kommt aber auf die Inhalte an.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Kaputte Encodings kann man vielleicht mit ftfy fixen.
Das funktioniert oft ziemlich gut, aber zaubern kann das Tool auch nicht.

Wenn du das dann auf die XML-Datei anwendest, wirst du nachträglich auch den Codec auf utf8 im XML Dokument ändern müssen.
Vorher ein Backup machen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

diablo75 hat geschrieben: Donnerstag 4. November 2021, 14:55 Wie kann ich überprüfen ob eine XML Datei fehlerhaft ist (wie oben z.B), damit ich mir sowas nicht in meine Datenbank einspiele??
Der erste Schritt beim Import unbekannter Daten ist eigentlich immer die Analyse. Wenn es sich um einmalige Sachen handelt, kann man das manuell durchführen. Zum Beispiel mit den üblichen Unix-Tools für solche Zwecke oder auch interaktiv in einer Python-Shell. Daraus kann man dann ggf. auch einfache Prüfskripte schreiben. Speziell für die Überprüfung von XML-Dateien gibt es auch verschiedene Validierungstechniken, die teilweise jedoch einiges an Aufwand erfordern und daher eher dort anzutreffen sind, wo die professionelle Verarbeitung von XML zum Alltagsgeschäft gehört.
Antworten