{gelöst}Lazarus1.6RCx FPC3.0 String-Umwandlungen

Rund um die LCL und andere Komponenten
Antworten
hubblec4
Beiträge: 347
Registriert: Sa 25. Jan 2014, 17:50

{gelöst}Lazarus1.6RCx FPC3.0 String-Umwandlungen

Beitrag von hubblec4 »

Hallo an alle

Ich habe mir das neuste Lazarus installiert und bekomme nun einige Warungen im Nachrichtenfenster angezeigt, wenn ich das Projekt kompiliere.

Es geht um die String, AnsiString,WideString sachen.

was habe ich bisher gemacht:

aus einem edit feld den text in eine xml (mittels TDOMNode) eingefügt. Damit dann auch zeichen wie "ä ü ö" ordentlich in der xml datei angezeigt werden, habe ich folgende Umwandlung vorgenommen.

Code: Alles auswählen

Utf8ToAnsi(Edit.text)
Im nachrichten fenster sieht man dazu folgenden eintrag:

Code: Alles auswählen

unit1.pas(3095,45) Warning: Implicit string type conversion from "RawByteString" to "WideString"(
Im alten FPC lieferte die Funktion UTF8toAnsi einen Type String und jetzt diesen RawByteString.

Wenn ich das UTF8toAnsi weglasse gibt es eine andere Nachricht:

Code: Alles auswählen

unit1.pas(3083,33) Warning: Implicit string type conversion from "AnsiString" to "WideString"
Ich habe das soweit auch verstanden das es neuerungen sind, welche sich an Delphi anlehnen.

Mich würde jetzt brennend interessieren wie ich den AnsiString(welcher jetzt standard für Lazaurs zu seien scheint) in einen WideString (was ja der TDOMNode verlangt) konvertiere?


Ich befürchte jetzt mal auch das ich das dann für alle meine Projekte erneuern muss?
Zuletzt geändert von hubblec4 am Sa 16. Jan 2016, 10:36, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10877
Registriert: Mo 11. Sep 2006, 19:01

Re: Lazarus1.6RCx FPC3.0

Beitrag von theo »

Im Prinzip kannst du es afaik ohne explizite Umwandlung belassen.
Die Meldung sagt ja nur, dass es implizit gemacht wird.

Mit UTF8Decode kannst du es wahrscheinlich explizit umwandeln (Gegenstück UTF8Encode).

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: Lazarus1.6RCx FPC3.0

Beitrag von wp_xyz »

Das verstehe ich nicht: Was machst du denn da mit UTF8ToAnsi? Wenn der Text mit den äöü aus einem Edit-Control kommt, dann ist er UTF8-codiert. Und wenn du die XML-Datei als UTF8 abspeicherst, ist doch alles in bester Ordnung - da muss man gar nichts konvertieren.

Und welche XML-Bibliothek verwendest du hier? In der von fpc (Laz2_DOM, Laz2_xmlwrite/read) ist DOMString sowieso ein Ansistring. Wieso wird da nach Widestring konvertiert?
Zuletzt geändert von wp_xyz am Sa 16. Jan 2016, 00:36, insgesamt 1-mal geändert.

hubblec4
Beiträge: 347
Registriert: Sa 25. Jan 2014, 17:50

Re: Lazarus1.6RCx FPC3.0

Beitrag von hubblec4 »

wp_xyz hat geschrieben:Das verstehe ich nicht: Was machst du denn da mit UTF8ToAnsi? Wenn der Text mit den äöü aus einem Edit-Control kommt, dann ist er UTF8-codiert. Und wenn du die XML-Datei als UTF8 abspeicherst, ist doch alles in bester Ordnung - da muss man gar nichts konvertieren.

mmh also ich hatte damals nicht viel ahnung von xml und habe einfach dieses Standard Tut durchgelesen, dazu habe ich dann diese 3 units eingebunden

Code: Alles auswählen

DOM,XMLWrite,XMLRead
hier mal ein kleines bissl code:

Code: Alles auswählen

infoxml:=TXMLDocument.Create; // XML erzeugen
aTextNode:=infoxml.CreateTextNode(UTF8toAnsi(aTextValue)); // TextNode erzeugen
xmlfile.AppendChild(aTextNode); // Textnode ans xml anhänden
writeXMLFile(infoxml, Utf8ToAnsi(Filename)); // hier musste ich auch ein UTF8toAnsi verwenden da ich sonst die Datei nicht in Ordner speichern konnte mit ä ü ö 
Wie müsste ich das sonst behandeln damit keine Konvertierungen nötig sind.
Ebenso wenn ich ein xml einlese und dort einen TextNode auslese und dieser äüö enthält und es nicht nach UTF8 (AnsitoUTF8) umwandel habe ich dann im Edit feld ??? stehen.


@Theo ja UTF8Decode geht.
Bevor ich den Post gemacht hatte war ich auf der Suche was geändert wurde und da wird schon erwähnt das die CodeTabellen nicht mehr passen und es zu Datenverlust kommen könnte. Ich denke man sollte den Hinweis nicht ignorieren und umwandeln.

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: Lazarus1.6RCx FPC3.0

Beitrag von wp_xyz »

In dem Tutorial steht aber auch, dass es zusätzlich zu DOM, xmlread etc. auch units laz2_DOM, laz2_xmlread etc gibt, die UTF8 unterstützen. Damit bist du voll Lazarus-kompatibel, musst also keine Konvertierungsroutinen mehr aufrufen. Höchstens beim Dateinamen, aber ich glaube, das geht bei fpc3 auch automatisch.

hubblec4
Beiträge: 347
Registriert: Sa 25. Jan 2014, 17:50

Re: Lazarus1.6RCx FPC3.0

Beitrag von hubblec4 »

wp_xyz hat geschrieben: Und welche XML-Bibliothek verwendest du hier? In der von fpc (Laz2_DOM, Laz2_xmlwrite/read) ist DOMString sowieso ein Ansistring. Wieso wird da nach Widestring konvertiert?
ah ok, ich verwende andere units. sollte ich dann mal diese anderen ausprobieren. die sind dann nativer zu Lazarus?

wp_xyz
Beiträge: 5154
Registriert: Fr 8. Apr 2011, 09:01

Re: Lazarus1.6RCx FPC3.0

Beitrag von wp_xyz »

hubblec4 hat geschrieben:
wp_xyz hat geschrieben: Und welche XML-Bibliothek verwendest du hier? In der von fpc (Laz2_DOM, Laz2_xmlwrite/read) ist DOMString sowieso ein Ansistring. Wieso wird da nach Widestring konvertiert?
ah ok, ich verwende andere units. sollte ich dann mal diese anderen ausprobieren. die sind dann nativer zu Lazarus?
Ja (sorry, das geht jetzt etwas hin und her, weil ich den Beitrag oben nachträglich editiert hatte).

hubblec4
Beiträge: 347
Registriert: Sa 25. Jan 2014, 17:50

Re: Lazarus1.6RCx FPC3.0

Beitrag von hubblec4 »

Danke schön wieder was gelernt. Ich war froh das es damals so lief, denke mal die Flut an Infos hat mich das mit den anderen Units überlesen lassen.

Antworten