Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   ClientDataSet mit XML und UTF8 (https://www.delphipraxis.net/193967-clientdataset-mit-xml-und-utf8.html)

urdelphist 29. Sep 2017 13:23

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.

freimatz 29. Sep 2017 17:31

AW: ClientDataSet mit XML und UTF8
 
Hm, wie wäre es mit debuggen? Und wenn das nicht hilft loggen?

hoika 30. Sep 2017 06:58

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

urdelphist 30. Sep 2017 17:10

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....

mkinzler 30. Sep 2017 17:30

AW: ClientDataSet mit XML und UTF8
 
Am Einfachsten von UTF8 noch ASCII konvertieren oder nach UCS-2 (WideString)

urdelphist 30. Sep 2017 17:34

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

urdelphist 1. Okt 2017 10:14

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.

mjustin 1. Okt 2017 11:21

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)

Bernhard Geyer 1. Okt 2017 12:54

AW: ClientDataSet mit XML und UTF8
 
Zitat:

Zitat von mkinzler (Beitrag 1382355)
Am Einfachsten von UTF8 noch ASCII konvertieren oder nach UCS-2 (WideString)

WideString war nur unter Windows NT UTC-2. Seit 2000 ist der WideString UTF-16-Codiert.

urdelphist 3. Okt 2017 22:51

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 10:12 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz