UTF8 und TStringList.LoadFromFile()

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

UTF8 und TStringList.LoadFromFile()

Beitrag von MmVisual »

Hallo,

Ich kann mit einem TOpenDialog einen Dateiname auszählen, z.B. "J:\TestInstall\Neuer Ordner\undÜ ü ßß ö Ö ż łćó ss\cypl2-60-11126.stk".
Hier der Code:

Code: Alles auswählen

oDlgCsv.FileName := 'List.csv';
  oDlgCsv.Filter := 'CSV/STK-Datei|*.csv;*.stk';
  if not oDlgCsv.Execute then
    Exit;
  sl := TStringList.Create;             
  sl.LoadFromFile(oDlgCsv.FileName);


Doch es erscheint die Fehlermeldung:
Unable to open file "J:\TestInstall\Neuer Ordner\undÜ ü ßß ö Ö ż łćó ss\cypl2-60-11126.stk"

Ich habe auch schon den Dateiname mit UTF8ToSys() gewandelt, aber es hilft nicht.

Kann mir jemand bitte weiterhelfen?

Edit: Meine Lazarus-Version: Lazarus-0.9.31-31683-fpc-2.5.1-20110713-win32.exe

Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: UTF8 und TStringList.LoadFromFile()

Beitrag von Socke »

MmVisual hat geschrieben:Ich kann mit einem TOpenDialog einen Dateiname auszählen, z.B. "J:\TestInstall\Neuer Ordner\undÜ ü ßß ö Ö ż łćó ss\cypl2-60-11126.stk".

Die Windows-RTL arbeitet noch mit den Windows-Ansi-Funktionen, also einem 8-Bit-Zeichensatz. Dein Dateipfad enthält aber Zeichen, die darin nicht enthalten sind.

Daher wirst du wohl auf die korrespondierenden Unicode-Varianten der Windows-API zurückgreifen müssen um dir ein Datei-Handle zu besorgen und dieses in einen THandleStream zu füttern.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: UTF8 und TStringList.LoadFromFile()

Beitrag von Maik81ftl »

wenn Dein TopenDialog Sonderzeichen verwalten kann ja.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: UTF8 und TStringList.LoadFromFile()

Beitrag von Socke »

Maik81ftl hat geschrieben:wenn Dein TopenDialog Sonderzeichen verwalten kann ja.

Was meinst du mit Sonderzeichen? Es gibt nur Zeichen, und die können in einem Zeichensatz enthalten sein oder eben auch nicht.

TOpenDialog kommt von Lazarus und gehört damit also zur LCL. Und wie alle wissen, arbeitet die LCL grundlegend mit UTF-8 in allen Bereichen; und die RTL arbeitet immer mit dem Systemzeichensatz und die FCL arbeitet gar nicht mit Zeichensätzen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: UTF8 und TStringList.LoadFromFile()

Beitrag von MmVisual »

So in etwa habe ich mir das vorgestellt.

So viel ich weiß gibt es die RTL Variante auch für Unicode, nur muss man das irgendwie "umstellen".
Ich hab das noch nie gemacht, wie geht das?

Irgendwie ist es doof, das die Linux Variante anders (richtig) funktioniert als die Windows-Variante.

Edit: @Socke: Die LCL ist NICHT grundlegend komplett in UTF8! Beispiel: "lcl\fileutil.pas" Routine CopyFile gibt es nicht als UTF8 Variante.

Vielen Dank schon mal,
Gruß Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1445
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: UTF8 und TStringList.LoadFromFile()

Beitrag von MmVisual »

Ich habe mal die TStringList erweitert mit der Routine LoadFromFileUTF8 und SaveToFileUTF8.

Leider weiß ich jetzt nicht wie ich das ganze Lazarus + FPC neu kompilieren kann so dass ich das nutzen kann.

Kamm mir bitte jemand posten, welchen Kommandozeilen-Befehl ich in die DOS Box eintippen muss, damit der FPC meine neuen Dateien übersetzt?

(Auch hab ich TFileStream kopiert zu TFileStreamUTF8 und ein gibt ein CopyFileUTF8)

Vielen Dank für die Hilfe. Anbei meine geänderten Sourcen.

Grüße Markus.
Dateianhänge
UTF8.zip
(52.75 KiB) 86-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten