Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   TStrings Encodierung (https://www.delphipraxis.net/162231-tstrings-encodierung.html)

hansklok 13. Aug 2011 20:10

TStrings Encodierung
 
Hallo an alle,

ich versuche schon seit mehren Tagen herauszufinden wie eine TStringList unter Lazarus codiert ist, also ob Unicode oder Ansi. Unter Delphi kann man ja seit ein paar Versionen die Codierung mittels TEncoding selbst definieren.

Gibt's da auch ne Alternative für Freepascal?

HG hansklok

himitsu 14. Aug 2011 06:24

AW: TStrings Encodierung
 
Gehört die TStringList dort zur FreePascal-CL oder zu Lazarus?

FreePascal soll ja noch mit ANSI arbeiten.


Nja, aber du jast ja die Quellcodes, also schau doch einfach mal nach was wie gemacht wird?

JamesTKirk 16. Aug 2011 20:28

AW: TStrings Encodierung
 
Zitat:

Zitat von hansklok (Beitrag 1116669)
Hallo an alle,

ich versuche schon seit mehren Tagen herauszufinden wie eine TStringList unter Lazarus codiert ist, also ob Unicode oder Ansi. Unter Delphi kann man ja seit ein paar Versionen die Codierung mittels TEncoding selbst definieren.

Gibt's da auch ne Alternative für Freepascal?

HG hansklok

Einfacher Grundsatz: findest du die Klasse in einer Unit, die in %lazarus%\fpc\%version%\rtl oder lazarus%\fpc\%version%\packages liegt, dann ist die Wahrscheinlichkeit hoch, dass Ansi verwendet wird. Ist die Unit jedoch in %lazarus%\lcl, dann ist sie mit ziemlicher Sicherheit für UTF-8 ausgelegt.

Aber um deine Frage dennoch zu beantworten: TStrings arbeitet auf Ansi Strings, du musst also UTF8ToAnsi und AnsiToUTF8 verwenden, um Strings aus der GUI und wieder zurück zu transferieren.

Gruß,
Sven

hansklok 16. Aug 2011 21:46

AW: TStrings Encodierung
 
@ JamesTKirk: danke...sehr ausführlich. und wenn ich die stringlist dann in ner Datei Speicher, dann ist sie auch so formatiert? schade, ich hoffe, dass die lazarus/freepascal-entwickler schnell TEncoding a la Embarcadero nachrüsten!

himitsu 16. Aug 2011 22:22

AW: TStrings Encodierung
 
Hat Lazarus/FPS auch eine aktomatische Umkodierung?
Also wenn man z.B. einen UTF8String an einen AnsiString übergibt.

Wenn nicht, dann übergib das UTF8 einfach an die AnsiStringListe und es gibt keine Probleme (außer dem fehlenden BOM in der Datei)

UTF-8 ist ja gerade dafür entwikelt wurden, um in AnsiStrings gespeichert werden zu können.


Delphi seit D2009 wandelt leider UTF-8 und Ansi untereinander um (wenn die Strings entsprechende Codierungsinfos enthalten, was sie meistens tun).

JamesTKirk 17. Aug 2011 16:32

AW: TStrings Encodierung
 
Zitat:

Zitat von himitsu (Beitrag 1117384)
Hat Lazarus/FPS auch eine aktomatische Umkodierung?
Also wenn man z.B. einen UTF8String an einen AnsiString übergibt.

Nein, noch nicht. Ist aber in Entwicklung...

Zitat:

Zitat von himitsu
Wenn nicht, dann übergib das UTF8 einfach an die AnsiStringListe und es gibt keine Probleme (außer dem fehlenden BOM in der Datei)

UTF-8 ist ja gerade dafür entwikelt wurden, um in AnsiStrings gespeichert werden zu können.

Stimmt, das ist auch noch ne Möglichkeit. Solange du, hansklok dich daran hältst, dass UTF-8 Strings drin sind, dann hast du keine Probleme (vielleicht ne UTF-8 BOM am Anfang hinzufügen zur Sicherheit)

Gruß,
Sven

hansklok 17. Aug 2011 19:31

AW: TStrings Encodierung
 
Danke an himitsu und JamesTKirk!

Zitat:

Zitat von JamesTKirk (Beitrag 1117587)
Solange du, hansklok dich daran hältst, dass UTF-8 Strings drin sind, dann hast du keine Probleme (vielleicht ne UTF-8 BOM am Anfang hinzufügen zur Sicherheit)

Daran habe ich auch schon gedacht, habe allerdings keinen blassen Schimmer, wie ich das machen soll! Hast du ne Anregung?

Ich bin ja schon froh, dass ich für FP ne Lösung gefunden habe, damit ich nicht jedes mal ne neue typisierte Objektliste erstellen muss. Einfach ne neue Klasse erstellen, die hiervon abgeleitet ist:

Delphi-Quellcode:
Specialize TFPGObjectList<TSurname>;
Dann wird alles automatisch angepasst.

VG hansklok

JamesTKirk 18. Aug 2011 19:13

AW: TStrings Encodierung
 
Zitat:

Zitat von hansklok (Beitrag 1117640)
Danke an himitsu und JamesTKirk!

Zitat:

Zitat von JamesTKirk (Beitrag 1117587)
Solange du, hansklok dich daran hältst, dass UTF-8 Strings drin sind, dann hast du keine Probleme (vielleicht ne UTF-8 BOM am Anfang hinzufügen zur Sicherheit)

Daran habe ich auch schon gedacht, habe allerdings keinen blassen Schimmer, wie ich das machen soll! Hast du ne Anregung?

Einfachste Variante (der Code an sich ist ungetestet, sollte aber zumindest vom Prinzip her funktionieren):

Delphi-Quellcode:
const
  UTF8BOM: String = #$EF#$BB#$BF;

var
  s: TStrings;
begin
  ...
  // vor dem speichern (einmal eben)
  s.Text := UTF8BOM + s.Text;
  ...
end;
Zitat:

Zitat von hansklok
Ich bin ja schon froh, dass ich für FP ne Lösung gefunden habe, damit ich nicht jedes mal ne neue typisierte Objektliste erstellen muss. Einfach ne neue Klasse erstellen, die hiervon abgeleitet ist:

Delphi-Quellcode:
Specialize TFPGObjectList<TSurname>;
Dann wird alles automatisch angepasst.

Dass nennt sich "generics" und ist hier beschrieben.

Gruß,
Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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