![]() |
ClientDataSet mit XML und UTF8
Hallo,
ich verwende XE3 und UTF8-kodierte XML Dateien und lese diese Mittels XMLDocument, XMLTransformProvider und ClientDataSet ein, sodaß alle Data-Aware Komponenten so funktionieren, als würden die Daten aus einer Datenbank stammen (XML ist ja dann quasi eine). Für den XMLransformProvider wurden die entsprechenden Transformations-Dateien (XTR) mit XMLMapper erzeugt. Funktioniert soweit wie erwartet, aber leider nicht, wenn Umlaute ins Spiel kommen. Ich habe einiges ausprobiert, aber noch keine Möglichkeit gefunden, die fehlerhafte Anzeige in den TDBEdit Komponenten zu beseitigen. Es werden die Umlaute (manchmal erst beim zweiten Laden!) korrekt dargestellt. Wenn nicht, werden die UTF8-Entsprechungen angezeigt also zum Beispiel statt "äää" im XML wird "äää" angezeigt. Wenn man in dieses Feld klickt wird daraus unmittelbar "äää". Nachdem der Fokus dieses Feld verlässt, wird dort "���" angezeigt. Die Werte werden aber korrekt in die Datenbank übernommen. Allerdings nur in diesem Feld. Alle anderen, die Umlaute enthalten werden falsch kodiert zurückgeschrieben. Bin mir noch nicht sicher, wo genau die Konvertierung bzw. der Fehler stattfindet. Vielleicht sind es die visuellen Komponenten. Die automatisch erzeugten Felder für das ClientDataSet sind vom Typ TStringField. Diese Klasse hat ein Feld Value, welches vom Typ AnsiString ist. Für Hilfe wäre ich sehr dankbar. |
AW: ClientDataSet mit XML und UTF8
Hm, wie wäre es mit debuggen? Und wenn das nicht hilft loggen?
|
AW: ClientDataSet mit XML und UTF8
Hallo,
die letzten beiden Sätze enthalten doch schon die Ursache. Also hat die automatische Ermittlung der Feldtypen nicht ganz geklappt. AnsiString ist definitiv falsch -> Ändern |
AW: ClientDataSet mit XML und UTF8
Danke schon mal für die Beiträge.
Ganz so einfach ist es leider nicht. Wenn einfach nur die Datentypen falsch wären, müsste es zu einer konsistent falschen Anzeige kommen. Das ist aber nicht der Fall. Debugging ist auch nicht ganz so trivial, da es schon recht tief in die VCL geht und ich vieles nicht mehr verstehe. Ich hatte gehofft, dass dieses vielleicht vor mit jemand gelöst hätte. Manchmal sind ja nur Kleinigkeiten, die man übersieht. Schliesslich werkerln da einige Komponenten zusammen.... |
AW: ClientDataSet mit XML und UTF8
Am Einfachsten von UTF8 noch ASCII konvertieren oder nach UCS-2 (WideString)
|
AW: ClientDataSet mit XML und UTF8
UTF8 To Ansi geht ja auch, aber eben nicht zusammen mit diesen Komponenten. An keiner vernünftigen Stelle kann man da eingreifen.
Interessanterweise werden nicht mal die Methoden "OnGetText" und "OnSetText" der DatenbankObjekte dann aufgerufen, wenn man meint, dass sie aufgerufen werden müssten. So wie ich das sehen, werden die nur ein einziges Mal aufgerufen, was ich nicht verstehe. Ich habe mich schon einige Stunden damit auseinandergesetzt und eine "einfache" Lösung, d.h. eine Konvertierung irgendwo geht eben genau nicht. Vielleicht stelle ich mal ein einfaches Beispiel so zusammen, dass ich den Code hier posten kann. PS: ich habe das gerade mal unter XE 10.2.1 Tokyo getestet - identisches Verhalten |
AW: ClientDataSet mit XML und UTF8
Liste der Anhänge anzeigen (Anzahl: 1)
So, damit es sicher jeder, der möchte, ansehen kann, habe ich ein kleines Testprojekt mit dem beschriebenen Problem hochgeladen.
Darin werden erstmal keine Konvertierungen automatisch vorgenommen, also verhält es sich unverändert. |
AW: ClientDataSet mit XML und UTF8
Kann das Projekt mit einer Professional Version oder nur mit einer der "größeren" Delphi-Editionen getestet werden? (ich nehme an, das die XTR Unterstützung in Professional nicht enthalten ist, Tester müssten daher eine Edition > Professional besitzen)
|
AW: ClientDataSet mit XML und UTF8
Zitat:
|
AW: ClientDataSet mit XML und UTF8
Das Projekt wurde unter XE3 Professional bearbeitet und gespeichert. Inwieweit andere Versionen damit umgehen können, weiß ich aktuell nicht. Die aktuellste Demo (ist immer wohl die höchste Version), kann es öffnen.
Dank & Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz