AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStrings Encodierung

Ein Thema von hansklok · begonnen am 13. Aug 2011 · letzter Beitrag vom 18. Aug 2011
Antwort Antwort
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

TStrings Encodierung

  Alt 13. Aug 2011, 21:10
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStrings Encodierung

  Alt 14. Aug 2011, 07:24
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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: TStrings Encodierung

  Alt 16. Aug 2011, 21:28
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#4

AW: TStrings Encodierung

  Alt 16. Aug 2011, 22:46
@ 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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: TStrings Encodierung

  Alt 16. Aug 2011, 23:22
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).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#6

AW: TStrings Encodierung

  Alt 17. Aug 2011, 17:32
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 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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#7

AW: TStrings Encodierung

  Alt 17. Aug 2011, 20:31
Danke an himitsu und JamesTKirk!

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:

Specialize TFPGObjectList<TSurname>; Dann wird alles automatisch angepasst.

VG hansklok
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

AW: TStrings Encodierung

  Alt 18. Aug 2011, 20:13
Danke an himitsu und JamesTKirk!

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

Specialize TFPGObjectList<TSurname>; Dann wird alles automatisch angepasst.
Dass nennt sich "generics" und ist hier beschrieben.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.
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