![]() |
Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Hallo!
Ich arbeite gerade an einem Programm, das Einträge aus einer Protokolldatei eines anderen Programms ausließt und darstellt. Die Protokolldatei ist eine einfache Textdatei, allerdings werden Umlaute dort codiert dargestellt. Statt "Müller" steht dort also z.B. "Müller"... Gibt es eine Möglichkeit diese Zeichen korrekt auszulesen? Kann man also beim Öffnen/Lesen einer Textdatei irgendwie einen bestimmten Zeichensatz wählen? Wenn ja, wie finde ich heraus, welcher Zeichensatz der richtige ist? Oder müssen diese Zeichen nach dem Lesen in die richtigen Umlaute konvertiert werden? Gibt es hierfür fertige Funktionen und muss ich mir selbst etwas basteln? Besten Dank Ares |
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Schau Dir mal die Funktion OemToChar an.
Verwendung findest Du in der Delphi-Hilfe und hier im Forum. |
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Die Kodierung sieht mir eher nach UTF-8 aus, da aus einem Zeichen zwei werden. OEMToChar() würde aber bei einem Char bleiben.
|
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Zitat:
Zitat:
|
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Hallo!
Besten Dank für eure Tipps. Gibt es eine Möglichkeit zu ermitteln, welcher Zeichensatz in einer Datei verwendet wurde? Oder muss man dafür wissen, mit welchem Zeichensatz die Datei erstellt wurde? |
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Hallo,
die Unterscheidung von UTF-8 und ANSI kannst du dir schenken, wenn du beim Einlesen jede Zeile einfach mit Utf8ToAnsi() konvertierst. Grüße vom marabu |
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Ich lese den Inhalt der Textdatei ganz in ein TStrings-Objekt ein:
Delphi-Quellcode:
Wenn ich das so mache, werden die Umlaute falsch kodiert angezeigt. Verwende ich zusätzlich Utf8ToAnsi oder UTF8Decode ist textfile hinterher leer, also textfile='';
var
textfile: TStrings; begin textfile: TStringList.Create; textfile.LoadFromFile('C:\test.text'); Memo1.Lines.Text := textfile.Text; ... end; Was mache ich hier falsch? |
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Hat die Datei ein Byte-Order-Mark?
Zeige bitte mal, wie du Utf8ToAnsi() anwendest. Nachtrag:
Delphi-Quellcode:
type
string4 = string[4]; function SkipBOM(s: TStream; const bom: string4): Boolean; var sBom: string4; begin s.Position := 0; SetString(sBom, PChar(@sBom[1]), s.Read(sBom[1], Length(bom))); Result := sBom = bom; if not Result then s.Position := 0 end; procedure LoadFromUtf8File(s: TStrings; fn: TFileName); var i: Integer; fs: TFileStream; begin fs := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite); try SkipBOM(fs, #$EF#$BB#$BF); s.LoadFromStream(fs); for i := 0 to Pred(s.Count) do s[i] := Utf8ToAnsi(s[i]); finally fs.Free; end; end; procedure TForm1.Button6Click(Sender: TObject); begin LoadFromUtf8File(Memo.Lines, ParamStr(1)); end; |
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Nein, die Datei hat kein BOM.
Utf8ToAnsi() verwende ich ganz einfach so:
Delphi-Quellcode:
Memo1.Lines.Text := Utf8ToAnsi(textfile.Text);
|
Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Behauptung: textfile kann danach nicht leer sein, da du den Rückgabewert einer Property als Parameter verwendest (Text) und dieser geht nur in eine Richtung. Ein Setter wird hierbei definitv nicht aufgerufen und als Var Parameter wird die Property niemals akzeptiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 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