AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

UTF-8 in Datei schreiben

Ein Thema von H.Bothur · begonnen am 18. Nov 2019 · letzter Beitrag vom 20. Nov 2019
Antwort Antwort
Seite 2 von 2     12
samso

Registriert seit: 29. Mär 2009
386 Beiträge
 
#11

AW: UTF-8 in Datei schreiben

  Alt 18. Nov 2019, 17:01
Allerdings ist es mir eine Rätsel wieso man da dieses SetCodePage benötigt. In D7 ist das nicht nötig und da reicht ein simples UTF8Encode und der String ist dann UTF8-codiert.
In D7 ist SetCodePage ja auch nicht vorhanden. Ich denke, hier geht um eine Version aber Delphi 2009 die bereits Unicode-Strings kennt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
Ort: Oberreichenbach
16.537 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: UTF-8 in Datei schreiben

  Alt 18. Nov 2019, 17:06
Allerdings ist es mir eine Rätsel wieso man da dieses SetCodePage benötigt. In D7 ist das nicht nötig und da reicht ein simples UTF8Encode und der String ist dann UTF8-codiert.
D7 ist auch noch eine Version die nicht richtig viel (was die GUI betrifft) mit Unicode anfangen konnte.
Ab D2009 ist der String = UnicodeString und nicht mehr wie früher String = AnsiString.
Und da muss man halt bei solchen Uraltfunktionen mittlerweile einig Tricks anwenden damit es so funktioniert wie es früher Funktionerte.
Das beste ist einfach diese nicht mehr zu verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
524 Beiträge
 
Delphi 2009 Professional
 
#13

AW: UTF-8 in Datei schreiben

  Alt 18. Nov 2019, 18:28
Diese uralten Funktionen AssignFile, Writeln und Co. können nur Ansi-Strings.
RawByteString ist AnsiString ohne Codepage.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
319 Beiträge
 
FreePascal / Lazarus
 
#14

AW: UTF-8 in Datei schreiben

  Alt 19. Nov 2019, 08:28
Prüfe mal vorher ob die Datei auch als UTF8 eingestellt ist. Ich habe da sProblem auch mal gehabt, da war die Ausgabe zwar richtig, dadurch das die Datei selber aber Unicode und nicht UTF8 war, hat er es entsprechend falsch umgesetzt.
Einmal die Datei neu als UTF8 gespeichert und nochmal getestet - Einwandfrei.

Vielleicht ist es bei dir ja ähnlich.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
140 Beiträge
 
#15

AW: UTF-8 in Datei schreiben

  Alt 20. Nov 2019, 10:19
Eine moderne Alternative ist aber auch nicht viel schwerer in der Umsetzung, gibt es für die Streams auch diverse Klassen, die einem die Arbeit erleichtern. Besonders einfach finde ich den Streamwriter. Eine etwas neuere Log-Variante sieht etwa so aus:

Delphi-Quellcode:
begin
  logFile:=TStreamWriter.Create(filename,true,TEncoding.UTF8);
  try
    logFile.WriteLine(prefix+' ['+DateTimeToStr(now)+'] '+logMessage);
  finally
    logFile.Free;
  end;
end;
Hier wird der Zeichensatz einfach beim Erstellen des Objekts angegeben und gut ist.
Sorry wenn ich da noch einmal so blöde nachfrage ... dann kann ich also Write komplett durch diese Variante ersetzen und bin damit wieder einigermaßen "State of the Art" ?

Gruß
Hans
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.256 Beiträge
 
#16

AW: UTF-8 in Datei schreiben

  Alt 20. Nov 2019, 10:25
Du kannst auch einfach die Funktionen TFile.WriteAllLines() und TFile.WriteAllText() aus System.IOUtils nutzen.
Damit spart man sich viele Zeilen.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
469 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: UTF-8 in Datei schreiben

  Alt 20. Nov 2019, 13:51
Sorry wenn ich da noch einmal so blöde nachfrage ... dann kann ich also Write komplett durch diese Variante ersetzen und bin damit wieder einigermaßen "State of the Art" ?
Korrekt. Ich finde den TStreamWriter eine wunderbar einfach zu benutzende Klasse, wenn es darum geht, zeilenweise etwas in eine Datei zu schreiben oder an eine existierende Datei dranzuhängen. Also das, was man früher klassisch mit einem "writeln(fileHandle,...)" gemacht hat.

Andere Varianten wurden ja hier schon genannt: eine TStringList eignet sich dann als angenehme Art, mittels StringList.SaveToFile, wenn es darum geht, eine ganze Datei in einem Rutsch zu schreiben, die du vorher im Speicher zusammensetzt. Und dann gibt es ja noch die von DieDolly gerade genannte Methode mit TFIle... Und wenn dir langweilig ist, kannst du natürlich auch "von Hand" in den TFileStream schreiben - aber da finde ich die obigen Methoden die angenehmere Variante.
  Mit Zitat antworten Zitat
H.Bothur

Registriert seit: 25. Jun 2012
140 Beiträge
 
#18

AW: UTF-8 in Datei schreiben

  Alt 20. Nov 2019, 17:01
Da es ja keinen Danke-Button gibt ... Danke !!

Hans
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf