TStringList ohne BOM

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Bernd82
Beiträge: 53
Registriert: Di 22. Sep 2009, 15:12

TStringList ohne BOM

Beitrag von Bernd82 »

Ich erzeuge eine TStringList und Schreibe eine Zeile hinein:

Code: Alles auswählen

SL:=TStringList.Create;
SL.Add('Hallo');
SL.SaveToFile(ANiceFileName);
SL.Free;


Beim Lesen hat sich der Inhalt aber leider geändert:

Code: Alles auswählen

SL:=TStringList.Create;
SL.LoadFromFile(ANiceFileName);
IF SL[0]='Hallo' THEN BEGIN END
ELSE BEGIN END;
SL.Free;


Der IF-Vergleich zeigt, dass sich der Text in der ersten Zeile verändert hat: Vor dem "Hallo" stehen unsichtbar die 3 UTF8-BOM-Bytes: EF+BB+BF. (BOM = Byte Order Marker)

Nur weil Length(SL[0]) nicht 5 sondern 8 ergibt, kann man es erkennen.

Wie kann ich die 3 Bytes los werden? Am Besten schon beim Schreiben in die Datei. Nicht jede StringList ist ja eine UTF8-Datei. Warum kommt diese Kodierungsinfo heimlich am Anfang der erste Zeile?

Wahrscheinlich muss ich mir einen eigenen Typ von TStringlist ableiten?

Ich habe schon eine ganze Zeit gegoogelt und hier im Forum Sachen gelesen. Wie ist der aktuelle Stand?

Für jede mögliche Hilfe oder Info danke im Voraus!

Gruß Bernd

Edit: LoadFromFile statt ReadFromFile im 2. Code-Snippet
Zuletzt geändert von Bernd82 am Di 6. Sep 2016, 09:21, insgesamt 1-mal geändert.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: TStringList ohne BOM

Beitrag von Michl »

Was nutzt du denn für eine TStringList? Die Classes.TStringList hat keine Methode ReadFromFile und speichert auch kein BOM.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Bernd82
Beiträge: 53
Registriert: Di 22. Sep 2009, 15:12

Re: TStringList ohne BOM

Beitrag von Bernd82 »

Hi Michl,

ich habe mich vertippt. Es heißt natürlich "LoadFromFile" statt "ReadFromFile". Wenn ich im Quelltext auf TStringList mit [Ctrl] klicke, komme ich zu classesh.inc. Dort ist das TStringList deklariert, das ich verwende.

Und Du hast anscheinend recht, TStringList.SaveToFile schreibt momentan keinen BOM vor die erste Zeile. Ich werde mir den BOM wohl mit einem Editior o.ä. eingefangen haben...

Ich werde es beobachten.

Danke für Deine Hilfe!

Gruß Bernd

Bernd82
Beiträge: 53
Registriert: Di 22. Sep 2009, 15:12

Re: TStringList ohne BOM

Beitrag von Bernd82 »

Oh jeh, es kam von Windows-Notepad :oops: Entschuldigung für die falsche Interpretation und danke für die Hilfe!

Gruß Bernd

Antworten