AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi XE, Utf8 in Textdatei

Ein Thema von FrankJ28 · begonnen am 14. Dez 2010 · letzter Beitrag vom 15. Dez 2010
Antwort Antwort
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#1

Delphi XE, Utf8 in Textdatei

  Alt 14. Dez 2010, 15:42
Hallo Forum,
hat jemand eine Tip für mich, wie ich einen String als Utf8-Zeichenkette in ein Textfile bekomme.

Code:
writeln(TextDatei,AnsiToUtf8(MeinString));
funktionierte bis Delphi 2007 prima. Da MeinString nun Unicode ist und writeln offensichtlich nur noch ANSI ausliefert ....

Danke für jeden Tip
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi XE, Utf8 in Textdatei

  Alt 14. Dez 2010, 16:10
{TStringList}.SaveToFile(..., TEncoding.UTF8)
$2B or not $2B
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Delphi XE, Utf8 in Textdatei

  Alt 14. Dez 2010, 16:19
soll heißen den ganzen "Schmonz" (ist ja leider nicht nur eine Zeile) zunächst in eine StringList schreiben und dann das gesammelte Werk auf Platte? Probiere ich nachher einmal aus, glücklich macht es mich aber nicht.
Trotzdem Dank für die Mühe/Idee
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Delphi XE, Utf8 in Textdatei

  Alt 14. Dez 2010, 16:31
Sofern die zu schreibenden Daten nicht die Kapazität des Arbeitsspeichers überschreiten geht das wohl, ja.
Falls es jedoch mehr ist, kann man natürlich auch mit einem TFileStream arbeiten
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi XE, Utf8 in Textdatei

  Alt 14. Dez 2010, 16:42
Hi Frank,

müsste auch so gehen:

writeln(textDatei,utf8encode(meinString));
Hatte ich bis vor kurzem hier problemlos im Einsatz, um Dateien mit UTF8-Codierten Strings auszugeben. Mittlerweile mache ich das auch mit einer TStringList, aber das hat andere Gründe.

Bis denn
Bommel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Delphi XE, Utf8 in Textdatei

  Alt 14. Dez 2010, 18:11
Keine Ahnung, wieso es immer noch Programmierer gibt, die an ReadLn und WriteLn kleben wie Politiker auf ihren Stühlen.
read, readln, write, writeln, AssignFile, rewrite, usw. sind steinalte Funktionen aus der Pascal-Ära.
Hätte Pascal damals schon Objekte gekannt, dann hätte Prof. Niklaus Wirth die Dateifunktionen niemals in den Sprachumfang von Pascal aufgenommen.
Aus heutiger Sicht war es jedenfalls ein Fehler die Funktionen in Pascal aufzunehmen.
Andreas
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi XE, Utf8 in Textdatei

  Alt 15. Dez 2010, 13:10
Hallo shmia,

hm, readln/writeln für die Datei-Ausgabe zu verdammen, nur weil sie aus der Pascal-Ära stammen, ist dann aber auch ein bisschen einfach. Viele andere Elemente in Delphi stammen auch noch aus Pascal-Zeiten und deswegen sind sie ja nicht böse - und umgekehrt ist ja eine Lösung nicht sofort toll, nur weil sie objektorientiert umgesetzt ist.

Wie geschrieben habe ich bis vor kurzem auch noch oft auf readln und writeln gesetzt und das erst gelassen, weil es da im Zusammenhang mit irgendwelchen Einstellungen vom Samba-Servern diverser Kunden spürbare Perfomance-Probleme gab, die es bei der Art wie die modernen Stream-Operationen die Daten einlesen, offensichtlich nicht gibt.

Aber der Grund, warum ich (und wahrscheinlich auch die meisten anderen, die es noch immer tun) readln/writeln bis vor kurzem eingesetzt habe, ist, dass es so schön einfach ist, seit Jahrzehnten funktioniert und man trotz der Einfachheit eine recht gute Kontrolle hat, was eigentlich passiert.

Gerade das Beispiel von UTF8-kodierten Text-Dateien ist ein sehr schönes:

Wenn ich diese mit TStringList und TEncoding.UTF8 lesen möchte, dann zickt die StringList rum, sobald in der Datei Zeichen vorkommen, die nicht sauber UTF8-kodiert sein. Die StringList schmeißt dann kurzerhand einfach alles weg und das ist natürlich total ärgerlich. Wenn ich mich selber um das Einlesen via readLn kümmere, dann kann ich mir im Programm selbst überlegen, wie ich mit solchen Fällen umgehe: ich könnte eine ordentliche Fehlermeldung ausgeben oder die einzelne Zeile einfach mit UTF8Decode ausgeben, was dann zwar zu einer unsauberen Textausgabe führt, aber allemal besser ist als nix (so sehen es zumindest die meisten Benutzer).

Klar, das kann ich auch mit einem TFileStream lösen, müsste mich dann aber selber um das zeilenweise Einlesen der Daten kümmern. Oder ich versuche die TStringList davon abzuhalten, die Daten im richtigen Format einzulesen.

Irgendwie geht das also alles, aber mit raedLn/writeLn ist es halt schön einfach, und deswegen wird es wohl auch noch immer so oft genutzt.

Bis denn
Bommel
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Delphi XE, Utf8 in Textdatei

  Alt 15. Dez 2010, 13:23
Keine Ahnung, wieso es immer noch Programmierer gibt, die an ReadLn und WriteLn kleben wie Politiker auf ihren Stühlen.
@Andreas: weil diese Programmierer einer speziellen Aufgabenstellung/Plattform gerecht werden müssen.

@Bommel: Danke, klappt.

Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:43 Uhr.
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