CreateDir nicht unicodefähig?

Rund um die LCL und andere Komponenten
Antworten
Lion
Beiträge: 207
Registriert: Mo 24. Mär 2014, 09:58

CreateDir nicht unicodefähig?

Beitrag von Lion »

Hallo Jungs,

ich arbeite gerade mit der CreateDir() Methode und habe festgestellt, dass das nicht unicodefähig ist. Habt ihr eventuell ein Tipp wie ich ein Verzeichnis auch in anderen Sprachen erstelle?

Danke!

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2905
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: CreateDir nicht unicodefähig?

Beitrag von m.fuchs »

Da nimmst du CreateDirUtf8 (http://lazarus-ccr.sourceforge.net/docs ... rutf8.html) aus der Unit FileUtil.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: CreateDir nicht unicodefähig?

Beitrag von marcov »

Createdir ist Unicode tauglich mit FPC 3+

Benutzeravatar
theo
Beiträge: 11327
Registriert: Mo 11. Sep 2006, 19:01

Re: CreateDir nicht unicodefähig?

Beitrag von theo »

marcov hat geschrieben:Createdir ist Unicode tauglich mit FPC 3+
Stimmt, und es funktioniert tatsächlich.

Das neueste Lazarus (trunk) hat jetzt auch Optionen dafür.
Damit geht auch sowas unter Win (Wine getestet):

Code: Alles auswählen

CreateDir('Z:\home\theo\ääüЖ'); 
Das geht aber noch immer nicht:

Code: Alles auswählen

var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl.LoadFromFile('Z:\home\theo\ääü.txt');  
Dateianhänge
lazzfpc32.png
lazzfpc3.png

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: CreateDir nicht unicodefähig?

Beitrag von Michl »

theo hat geschrieben:Das geht aber noch immer nicht:

Code: Alles auswählen

    var sl:TStringList;
    begin
      sl:=TStringList.Create;
      sl.LoadFromFile('Z:\home\theo\ääü.txt'); 
Lt. Usually the RTL uses the system codepage for strings (e.g. FileExists and TStringList.LoadFromFile). geht es schon. Bei mir funktioniert es, wenn ich {$codepage utf8} im Code, nicht in den Projekteinstellungen, setze:

Code: Alles auswählen

{$mode objfpc}{$H+}
{$codepage utf8}         

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 11327
Registriert: Mo 11. Sep 2006, 19:01

Re: CreateDir nicht unicodefähig?

Beitrag von theo »

Stimmt, du hast recht.
Damit fehlt aber noch die richtige Unterstützung in der IDE.
Wenn ich eine "UTF-8 Applikation" erstelle und dann noch

Code: Alles auswählen

-dEnableUTF8RTL
-FcUTF8
dem Compiler mitgebe, hätte ich eigentlich nicht damit gerechnet, dass noch mehr zu tun ist.
Komischerweise reicht es auch für CreateDir('Z:\home\theo\ääüЖ').

Warum reicht -FcUTF8 nicht für SL.LoadFromFile?
----------------------------------------------------------

P.S. Jetzt habe ich eine echte Lücke:
Zwei Tests im gleichen Code:
T1: sl.LoadFromFile('Z:\home\theo\ääüЖ.txt');
T2: inttostr(length('öäüЖ'));

Fall1: kein {$codepage utf8} und kein -FcUTF8: T1: Unable to open File, T2: Resultat: 8 (Alles wie erwartet kein Unicode).
Fall2: kein {$codepage utf8} aber -FcUTF8: T1 Unable to open File, T2: Resultat: 4 (also als UTF8 interpretiert).
Fall3: {$codepage utf8} und -FcUTF8: T1 OK, T2: Resultat 4 (Alles Unicode).
Fall4: {$codepage utf8} und kein -FcUTF8: T1 OK, T2: Resultat 4 (Alles Unicode).

Wo liegt der Unterschied zw. Fall2 und Fall3?

Lion
Beiträge: 207
Registriert: Mo 24. Mär 2014, 09:58

Re: CreateDir nicht unicodefähig?

Beitrag von Lion »

Tatsächlich, es läuft mit CreateDirUtf8(); !!!

Lazarus Buch bestätigt es auch.

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: CreateDir nicht unicodefähig?

Beitrag von Michl »

theo hat geschrieben:Wo liegt der Unterschied zw. Fall2 und Fall3?
Ich habe zwar keine Ahnung warum, hatte aber das Verhalten auch bemerkt. Denkst du, man sollte einen Eintrag im Bugtracker machen oder liegt es einfach daran, dass gerade die Umstellung im Gange ist?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 11327
Registriert: Mo 11. Sep 2006, 19:01

Re: CreateDir nicht unicodefähig?

Beitrag von theo »

Michl hat geschrieben:
theo hat geschrieben:Wo liegt der Unterschied zw. Fall2 und Fall3?
Ich habe zwar keine Ahnung warum, hatte aber das Verhalten auch bemerkt. Denkst du, man sollte einen Eintrag im Bugtracker machen oder liegt es einfach daran, dass gerade die Umstellung im Gange ist?!
Den Bugtracker würde ich deswegen nicht bemühen. Ist ja alles noch frisch.
Erst mal schauen, ob es eine Erklärung dafür gibt. marcov, mattias oder FPK tauchen hier ja auch ab und zu auf.

Benutzeravatar
theo
Beiträge: 11327
Registriert: Mo 11. Sep 2006, 19:01

Re: CreateDir nicht unicodefähig?

Beitrag von theo »


marcov
Beiträge: 1104
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: CreateDir nicht unicodefähig?

Beitrag von marcov »

theo hat geschrieben:
Das geht aber noch immer nicht:

Code: Alles auswählen

var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl.LoadFromFile('Z:\home\theo\ääü.txt');  
Das ist normal. TStringlist ist ja definiert mit ansistring und nicht mit ansistring(cp_utf8).

Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

Re: CreateDir nicht unicodefähig?

Beitrag von Michl »

theo hat geschrieben:Die Diskussion wir hier geführt:
http://forum.lazarus.freepascal.org/ind ... cseen.html
Leider geht die Diskussion nicht weiter bzw. kommt zu einem bestimmten Ende. Aber mal der Interesse wegen, theo, was ist den eigentlich deine Meinung dazu? Du hast dich doch schon intensivst damit beschäftigt?! Ich kann beide Thesen nachvollziehen: Klarheit vs. Kompatibilität bzw. z.B. unter Win UTF8 vs. Unicode bzw. immer umwandeln (wenn man mit Laz. was mit Strings macht) vs. zu wissen, wann umgewandelt werden muss.

Ich verstehe beide Lager, kann für mich aber nicht wirklich sagen, welche Argumente schwerer wiegen. Für mich, als Entwickler, ist ein Model, was auf allen Platformen gleich genutzt wird (auch wenn ich z.Zt. nur unter Win entwickle), schöner - auch habe ich mich mit dem UTF8 eigentlich recht gut angefreundet - um aber nicht zu weit von Delphi zu gelangen, um potentielle Entwickler nicht zu verschrecken, und um den (verdeckten) Konvertierungsaufwand im Rahmen zu halten, ist eine Unicodenutzung unter Win evtl. doch vorzuziehen?

Generell kann ich mit Allem leben, wenn es dann nicht alle Nase lang geändert wird, denn vermutlich haben beide Vorgehensweisen ihre Macken bzw. Besonderheiten.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 11327
Registriert: Mo 11. Sep 2006, 19:01

Re: CreateDir nicht unicodefähig?

Beitrag von theo »

Michl hat geschrieben:Aber mal der Interesse wegen, theo, was ist den eigentlich deine Meinung dazu?
Mir ist das eigentlich mittlerweile egal.
Bin dankbar, wenn jemand irgendwas funktionierendes entscheidet, damit man weiß wie es weiter geht.
Alle kann man wahrscheinlich nicht glücklich machen.

Benutzeravatar
theo
Beiträge: 11327
Registriert: Mo 11. Sep 2006, 19:01

Re: CreateDir nicht unicodefähig?

Beitrag von theo »

Jetzt geht die gleiche Schlammschlacht, die schon seit Jahren auf allen Kanälen läuft wieder im englischen Forum los:
http://forum.lazarus.freepascal.org/ind ... msg168686/

Ich kann es nicht mehr hören/lesen. Manchmal wünschte ich mir, die würden das physisch regeln mit einer Prügelei und einem Schiedsrichter. ;-)
Dann hätte man wenigstens eine Entscheidung. :mrgreen:

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: CreateDir nicht unicodefähig?

Beitrag von Komoluna »

leider/zum Glück geht das im Internet nicht...
(zum Glück, weil wegen Meinungsfreiheit)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Antworten