Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Umlaute (https://www.delphipraxis.net/150288-umlaute.html)

Berni68 12. Apr 2010 20:28


Umlaute
 
Hallo zusammen,

wie kann ich folgendes Problem in Lazarus umgehen:

RenameFile(quelle,ziel) funktioniert NICHT mit Umlauten
(*
FileExists() funktioniert mit Umlauten
DirectoryExists() funktioniert mit Umlauten
DeleteFile() funktioniert mit Umlauten
ForceDirectory() funktioniert mit Umlauten
*)
sobald in quelle oder ziel entweder im Pfad oder im Dateiname ein Umlaut (äöü)
vorhanden ist (wo auch immer) wird nicht mehr umbenannt.

Bernhard Geyer 12. Apr 2010 20:35

Re: Umlaute
 
Sind Bugs in der Lazarus-VCL die (denke ich) größtenteils der Entscheidung geschultet sind den nativen Unicode-Stringtyp als UTF8 zu implementieren.

himitsu 12. Apr 2010 20:47

Re: Umlaute
 
Die Lazarus-VCL/RTL ist vorwiegend Unicode und teils UTF-8 und die FPC-RTL ist wohl mehr UTF-8 ... da wohl stimmen manchmal die Umwandlung nicht ganz

und du mußt auch noch aufpassen wann du welche Kodierung verwenden mußt.

Berni68 12. Apr 2010 20:51

Re: Umlaute
 
und wie pass ich da am besten auf?

himitsu 12. Apr 2010 20:54

Re: Umlaute
 
Zitat:

Zitat von Berni68
und wie pass ich da am besten auf?

Na schauen von welchem Typ die Parameter sind.

WideString, UTF8String, AnsiString/String, ...

Berni68 12. Apr 2010 21:03

Re: Umlaute
 
da kann ich nicht viel aufpassen.
ich verwende Lazarus zur Erstellung einer dll (64bit) die als UDF in Firebird verwendet wird.
da krieg ich die Zeichenfolgen (nur) als PChar.
Und mit PChar gehts rename mit Umlauten nicht. (string hab ich auch ausprobiert (ausserhalb der UDF)
geht aber auch nicht)

himitsu 12. Apr 2010 21:28

Re: Umlaute
 
Wenn nur PChar und String zu Auswahl stehen, dann kannst du es nur mal UTF-8-kodiert versuchen ... wenn dieses auch nicht geht, dann geht es einfach nicht. :stupid:

Berni68 13. Apr 2010 18:21

Re: Umlaute
 
Es gibt auch noch die Funtionen:
FileExistsUTF8
DirectoryExistsUTF8
DeleteFileUTF8
RenameFileUTF8
dann klappt's auch mit den Umlauten.

JamesTKirk 16. Apr 2010 16:13

Re: Umlaute
 
Zitat:

Zitat von Berni68
Es gibt auch noch die Funtionen:
FileExistsUTF8
DirectoryExistsUTF8
DeleteFileUTF8
RenameFileUTF8
dann klappt's auch mit den Umlauten.

Dann waren deine Strings wohl UTF-8 kodiert. Die FCL und die RTL von Free Pascal verwenden im Gegensatz zur LCL von Lazarus noch immer ANSI-Kodierung.

Theoretisch hätte folgender Aufruf zum Ziel führen können:
Delphi-Quellcode:
RenameFile(UTF8ToAnsi(quelle), UTF8ToAnsi(ziel));
Ein entsprechender Wikiartikel bei Free Pascal/Lazarus findet sich übrigens hier.

Gruß,
Sven


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