AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Textdatei mit Umlauten auslesen - falscher Zeichensatz?
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei mit Umlauten auslesen - falscher Zeichensatz?

Ein Thema von Ares · begonnen am 25. Feb 2008 · letzter Beitrag vom 27. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 09:27
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
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 09:45
Schau Dir mal die Funktion OemToChar an.
Verwendung findest Du in der Delphi-Hilfe und hier im Forum.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 09:59
Die Kodierung sieht mir eher nach UTF-8 aus, da aus einem Zeichen zwei werden. OEMToChar() würde aber bei einem Char bleiben.
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 10:04
Zitat von Ares:
Ich arbeite gerade an einem Programm, das Einträge aus einer Protokolldatei eines anderen Programms ausließt und darstellt.
Wie?

Zitat von Ares:
Die Protokolldatei ist eine einfache Textdatei, allerdings werden Umlaute dort codiert dargestellt. Statt "Müller" steht dort also z.B. "Müller"...
Wie Muetze1 schon schreibt: Dieser Effekt tritt dann auf, wenn UTF-8-kodierte Daten als ISO-8859-1-kodierte Daten gelesen werden. Dass du die meisten Buchstaben so siehst, wie du sie kennst, ist reiner Zufall und liegt daran, dass UTF-8 die ersten paar und zerquetschten Zeichen genauso kodiert wie ISO-8859-1.
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#5

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 10:38
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 11:50
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
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#7

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 12:00
Ich lese den Inhalt der Textdatei ganz in ein TStrings-Objekt ein:

Delphi-Quellcode:
var
  textfile: TStrings;
begin
  textfile: TStringList.Create;
  textfile.LoadFromFile('C:\test.text');
  Memo1.Lines.Text := textfile.Text;
  ...
end;
Wenn ich das so mache, werden die Umlaute falsch kodiert angezeigt. Verwende ich zusätzlich Utf8ToAnsi oder UTF8Decode ist textfile hinterher leer, also textfile='';

Was mache ich hier falsch?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 12:48
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;
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#9

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 14:01
Nein, die Datei hat kein BOM.

Utf8ToAnsi() verwende ich ganz einfach so:

Memo1.Lines.Text := Utf8ToAnsi(textfile.Text);
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Textdatei mit Umlauten auslesen - falscher Zeichensatz?

  Alt 25. Feb 2008, 14:04
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:29 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