Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Sonderzeichen beim Einlesen von CSV-Dateien (https://www.delphipraxis.net/205778-problem-mit-sonderzeichen-beim-einlesen-von-csv-dateien.html)

Gelmo 15. Okt 2020 17:13

Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
Hallo zusammen!
Ich habe mir in Excel eine Liste mit französischen Vokabeln incl. ihrer Sonderzeichen angelegt (z.B. ç = [links-Alt] 135). Wenn ich die als CSV-Datei abspeichere, kann ich sie mit Excel, Libre Office Calc oder dem Windows-Editor öffnen, und die Sonderzeichen werden korrekt dargestellt.
Wenn ich die CSV-Datei aber als Textfile in Delphi einlese, werden die Sonderzeichen nicht korrekt wiedergegeben.
Ich bin ratlos, wie dies Problem gelöst werden kann. Meine Vorstellung ist, dass man Delphi mitteilen muss, dass es sich um Unicode-Zeichen handelt. Vielleicht kann mir hier jemand weiter-helfen.
Dafür schon im Voraus herzlichen Dank!
MfG Gelmo

Codebeispiel:
Delphi-Quellcode:
 
var
  Vokdatei,
  DSZ         : String;
  CSVF         : Textfile;
procedure TForm1.Button2Click(Sender: TObject);
begin

  VokDatei:=Opendialog1.FileName;
  filemode:=0; // read-only
  assignfile(CSVF,VokDatei);
  reset(CSVF);
  while not eof(CSVF) do begin
    readln(CSVF,DSZ);  // DSZ = Datensatz
    showMessage(DSZ);
  end;
end;
Ergebnis:
Excel: mère français «bientôt»
Editor : mère;français;«bientôt»
Delphi : mère;français;«bientôt»

P.S.
Zusatzbemerkung : Als Separator verwendet Excel offenbar das Semikolon, aber was dient als Delimiter? Ist aber aktuell nicht von Bedeutung, da die Datensätze „technisch“ richtig übernommen werden.

mkinzler 15. Okt 2020 17:23

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
Die Datei scheint im UTF-8 Format zu sein und wird als Standard-ASCII interpretiert zu werden.

Gelmo 15. Okt 2020 17:43

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
OK, Excel verwendet also UTF-8. Nur, wie kann ich Delphi veranlassen, diesem Zeichensatz ebenfalls zu verwenden?

Gandalf2265 15. Okt 2020 18:06

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
Ich verwende für so etwas eine Stringliste:
Delphi-Quellcode:
procedure demo;
var
  t : TStringlist;
  LDateiname : string;
begin
  LDateiname := 'meinecsvdatei.csv';
  t := TStringlist.create;
  try
    t.LoadFromFile( LDateiname, TEncoding.UTF8 );
    t.tue_irgend_etwas...
  finally
    t.free;
  end;
end;

Gelmo 15. Okt 2020 18:37

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
Vielen Dank!
Ich habe gerade hier im Forum gefunden, dass readln und writln nur mit ASCII funktionieren.
Ich probier es jetzt mit einer Stringlist. Das sind gute Aussichten.
MfG Gelmo

harfes 16. Okt 2020 07:28

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
Oder Du ersetzt in Deinem Code:

Readln(CSVF,DSZ);
ShowMessage(Utf8ToAnsi(DSZ));


Hartmut

himitsu 16. Okt 2020 09:16

AW: Problem mit Sonderzeichen beim Einlesen von CSV-Dateien
 
Aber nicht, wenn DSZ ein String bleibt.
AnsiString, RawByteString oder besser gleich UTF8String.

Bei Letzterem kann man dann auch das Utf8ToAnsi weglassen.
Und warum überhaupt Ansi?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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