Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStringList ohne BOM speichern? (https://www.delphipraxis.net/178328-tstringlist-ohne-bom-speichern.html)

fillibuster 2. Jan 2014 08:26

Delphi-Version: 2010

TStringList ohne BOM speichern?
 
Hi,

gibt es eine einfache Möglichkeit (D2010) das BOM nicht mitzuschreiben? Meine erstellten StringListen speichere ich so:
Delphi-Quellcode:
sl.SaveToFile(savepath + 'muster.txt',TEncoding.UTF8);

Vielen Dank!

Furtbichler 2. Jan 2014 08:40

AW: TStringList ohne BOM speichern?
 
Wer sollte das dann wieder einlesen können? Der BOM für UTF-8 hat schon seinen Sinn. Was stört dich daran?

Perlsau 2. Jan 2014 08:51

AW: TStringList ohne BOM speichern?
 
Moin Furtbichler, ein gutes Neues wünsche ich.

Z.B. meckert der Firebird-Script-Editor, wenn ich ein mittels StringListe erstelltes SQL-Script einlesen will, dem ein BOM vorangestellt ist. Liegt vielleicht aber auch an den Einschränkungen der Personal-Version :?

fillibuster 2. Jan 2014 08:53

AW: TStringList ohne BOM speichern?
 
Hallo - äh genau und frohes neues Jahr,

ich schreibe damit PHP Scripte und PHP hat die unschöne Eigenart bei einem Script mit BOM einen headers already sent Fehler zu produzieren.

Viele Grüße ...

Bernhard Geyer 2. Jan 2014 08:55

AW: TStringList ohne BOM speichern?
 
Wenn unbedingt sein muss bastel dir eine Hilfsfunktion indem du die Stringlist erst in einen stream Speicherst und dann die ersten 3 Byte beim Speichern weg lässt.

@Furtbichler: Ich kenne öfter den Fall das "Hochqualifizierte" ERP bzw. PLM-Entwickler es nicht schaffen in Exportdateien solch einen BOM zu schreiben (Man muss öfter schon froh sein das Sonderzeichen korrekt geschrieben werden). Dann haben Sie auch vermutlich oft das Problem so einen BOM lesen und korrekt interpretieren zu können.

Uwe Raabe 2. Jan 2014 09:17

AW: TStringList ohne BOM speichern?
 
Zitat:

Zitat von fillibuster (Beitrag 1241706)
gibt es eine einfache Möglichkeit (D2010) das BOM nicht mitzuschreiben?

  1. Update auf XE oder höher
  2. Delphi-Quellcode:
    sl.WriteBOM := false;

Perlsau 2. Jan 2014 09:18

AW: TStringList ohne BOM speichern?
 
Hab eben mal zum Testen zwei Textdateien erstellt, einmal via Liste.SaveToFile(Datei) und einmal via Liste.SaveToFile(Datei,TEncoding.UTF8). Wenn ich die mit PsPad öffne, wird mir dort für beide Dateien das Format UTF8 angezeigt.

Gehe ich recht in der Annahme, daß ab Delphi 2009 standardmäßig im UTF8-Format gespeichert wird, wenn nichts anderes angegeben wurde? Die Datei mit dem Bom ist nur unerheblich größer als die andere.

Uwe Raabe 2. Jan 2014 09:21

AW: TStringList ohne BOM speichern?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1241717)
Zitat:

Zitat von fillibuster (Beitrag 1241706)
gibt es eine einfache Möglichkeit (D2010) das BOM nicht mitzuschreiben?

  1. Update auf XE oder höher
  2. Delphi-Quellcode:
    sl.WriteBOM := false;

OK, sollte Punkt 1 zu große Schwierigkeiten bereiten, kannst du auch eine eigene Klasse von TUTF8Encoding ableiten, dort GetPreamble überschreiben und ein leeres TBytes zurückgeben. Du musst dich dann bloß selbst um Instanziierung und Freigabe des Encoding-Objekts kümmern.

fillibuster 2. Jan 2014 09:29

AW: TStringList ohne BOM speichern?
 
Hallo,

danke für die Antworten. Werde ich dann wohl selbst Hand anlegen. Eine Sache noch in diesem Zusammenhang. In den gespeicherten Dateien ist immer eine (Leer)Zeile mehr drin als eigentlich geschrieben wird. Liegt das auch am BOM?

Viele Grüße ...

MaBuSE 2. Jan 2014 09:37

AW: TStringList ohne BOM speichern?
 
Zitat:

Zitat von fillibuster (Beitrag 1241706)
gibt es eine einfache Möglichkeit (D2010) das BOM nicht mitzuschreiben? Meine erstellten StringListen speichere ich so:
Delphi-Quellcode:
sl.SaveToFile(savepath + 'muster.txt',TEncoding.UTF8);

TStrings hat eine Eigenschaft WriteBOM.

Per Default ist die auf True.

Beisp:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.WriteBOM := True;
  memo1.Lines.SaveToFile('z:\temp\1.txt', TEncoding.UTF8);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.WriteBOM := False;
  Memo1.Lines.SaveToFile('z:\temp\2.txt', TEncoding.UTF8);
end;


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