![]() |
AW: Textdatei utf8-kodiert speichern!
Zitat:
|
AW: Textdatei utf8-kodiert speichern!
mjustin: Das ist absolut korrekt. Nur leider scheint Delphi oder meine Unfähigkeit an der Geschichte etwas zu verwürfeln. Ich tippe übrigens auf letzteres ;)
Ich habe mir jetzt mal die entstandene Datei im Hex-Editor näher angesehen. Es scheint ein Manifest zu sein. Also wird irgendwie die Resource abgespeichert...nicht mein XML-String! :wiejetzt: Mach ich was grundsätzlich falsch mit dem Stream? Der auf Seite 1 geposteter Code ist alles, was ich mit dem StreamObjekt treibe. Sherlock |
AW: Textdatei utf8-kodiert speichern!
...und das ist des Rätsels Lösung: Der Sherlock ist dooof. :stupid:
Hier wie man es richtig macht: Das eigentliche Schreiben:
Delphi-Quellcode:
Bei der Erzeugung des ExportStrings sollte man im Übrigen immer wieder mal ein UTF8Encode einstreuen...vor allem da, wo Non-ANSI-Zeichen erwartet werden.
var DerBOM : UTF8String;
ExportText : UTF8String; . . . DerBOM := #$00EF#$00BB#$00BF; f.WriteBuffer(PAnsiChar(DerBOM)^, Length(DerBOM)); // Könnte man sicher auch in einem Rutsch machen f.WriteBuffer(PAnsiChar(exporttext)^, Length(ExportText)); // Aber so gehts definitiv...Unterschied? ZEIGER Quelle zur letztlichen Lösung (die D2009 voraussetzt, das ich nicht habe): ![]() Sherlock |
AW: Textdatei utf8-kodiert speichern!
Hi Sherlock,
noch mal zu den TextFiles. Ich bin da mittlerweile auch ein bisschen von weg, aber habe unter D2007 auch einige Jahre problemlos mit TextFiles/writeln und UTF8 gearbeitet. Codebeispiel:
Delphi-Quellcode:
Damit das reibungslos funktioniert und Delphi nicht intern irgendwas umwandelt, was ich gar nicht will, war es gut, den Text selbst ganz normal als "string" zu benutzen und erst am Ende beim writeln mit "utf8encode" umzuwandeln.
procedure Demo;
var s:string; fileH: TextFile; begin s:='Ein ü ist ein ü!'; assignFile(fileH,'egal.txt'); rewrite(fileH); writeln(fileH,utf8encode(s)); closeFile(fileH); end; Alternativ geht das gleiche auch mit TStringList, also:
Delphi-Quellcode:
Und wenn du auf Delphi >=2009 umsteigst, musst du den Code eh wieder anfassen. ;)
[...}
StrList.Add(utf8encode(s)); StrList.SaveToFile('egal.txt'); [...] |
AW: Textdatei utf8-kodiert speichern!
Grrmml...hättest Du das nicht vor 4 Stunden schreiben können? :lol:
Egal, jetzt stehen hier für zukünftige Generationen zwei Lösungen ;) :dp: Sherlock |
AW: Textdatei utf8-kodiert speichern!
Zitat:
In "zukunft" (D2009+) reicht ein
Delphi-Quellcode:
StrList.SaveToFile('egal.txt', TEncoding.UTF8);
|
AW: Textdatei utf8-kodiert speichern!
Zitat:
Und wenn das zukünftige Suchende finden, sollte aber auch noch erwähnt werden, dass beide Beispiele von mir keinen BOM schreiben. Der müsste, falls benötigt, dann noch manuell davor ergänzt werden. Bis denn Bommel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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