![]() |
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! |
AW: TStringList ohne BOM speichern?
Wer sollte das dann wieder einlesen können? Der
![]() |
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 :? |
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 ... |
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. |
AW: TStringList ohne BOM speichern?
Zitat:
|
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. |
AW: TStringList ohne BOM speichern?
Zitat:
|
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 ... |
AW: TStringList ohne BOM speichern?
Zitat:
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; |
AW: TStringList ohne BOM speichern?
Das hatte Uwe aber bereits erwähnt ;)
|
AW: TStringList ohne BOM speichern?
Zitat:
|
AW: TStringList ohne BOM speichern?
Zitat:
Entweder man hat nach jeder Zeile, auch der Letzten, automatisch ein #13#10 oder man kümmert sich von Anfang an selbst drum. Macht durchaus Sinn - falls du das gemeint hast. Gruß, Toni |
AW: TStringList ohne BOM speichern?
Zitat:
Man sollte vor dem Posten noch mal einen Refresh machen :oops: |
AW: TStringList ohne BOM speichern?
Zitat:
![]() ![]() |
AW: TStringList ohne BOM speichern?
Zitat:
|
AW: TStringList ohne BOM speichern?
Zitat:
|
AW: TStringList ohne BOM speichern?
Zitat:
Bestimmte Dateiformate haben eine andere Standardformatierung, wenn kein BOM vorhanden ist. z.B. XML ist standardmäßig UTF-8 Und auch bei HTML muß die Kodierung nicht als BOM drinstehen, sondern wird über Meta-Tags definiert. PS: Im Notfall hätte man sich auch ganz einfach ein eigenes TEncoding definieren können, welches kein BOM enthält.
Delphi-Quellcode:
TMBCSEncoding.Create(CP_UTF8)
|
AW: TStringList ohne BOM speichern?
Zitat:
Es gibt/gab ja auch Programme die eine Textdatei mit einem x0D0A121A beendet haben. Alles eine Frage der Konvention. Gruß K-H |
AW: TStringList ohne BOM speichern?
Zitat:
Der Cursor blinkt nach einem LineFeed allerdings korrekter Weise am Anfang einer (noch) nicht existenten zusätzlichen Zeile. Der XY-Positionsanzeiger des Cursors zeigt dann folgerichtig natürlich eine Zeile mehr an. Diese wird dann natürlich aber nicht mit gespeichert, weil das ja ein zusätzliches #13#10 (im Stream also ein #13#10#13#10) zur Folge hätte. Mehrfaches Laden und Speichern würde jetzt je eine Zeile mehr erzeugen und die Datei würde wachsen, wachsen, wachsen. Über die Darstellung kann man sich jetzt natürlich streiten. Technisch betrachtet ist es in meinen Augen aber korrekt wie es ist. Nur im Kopf ist es auf den ersten Blick irgendwie unlogisch. |
AW: TStringList ohne BOM speichern?
Zitat:
Zitat:
Zitat:
Somit dürfte nun auch die Frage aus ![]() |
AW: TStringList ohne BOM speichern?
Zitat:
|
AW: TStringList ohne BOM speichern?
Dennoch würde ich gerne noch einmal auf meine Frage in
![]() In welchem Format wird gespeichert, wenn ich keinen Encoding-Parameter angebe? |
AW: TStringList ohne BOM speichern?
![]() Zitat:
![]() Zitat:
|
AW: TStringList ohne BOM speichern?
Zitat:
Wobei die TStrings ab Delphi XE ja auch eine DefaultEncoding Eigenschaft hat.
Delphi-Quellcode:
Laut Doku: (
Memo1.Lines.DefaultEncoding; // sollte TEncoding.Default sein
Memo1.Lines.Encoding; // wird beim Laden gesetzt, per Default auf DefaultEncoding Memo1.Lines.SaveToFile('x'); ![]()
Code:
System.SysUtils.TEncoding.Default
Platfform Standardcodierung Instanz ------------- ------------------- --------------------------------------- Windows ANSI System.SysUtils.TMBCSEncoding Mac OS X UTF-8 System.SysUtils.TUTF8Encoding |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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