![]() |
Dateinamen mit UTF-8-Zeichen aus Directory lesen
Durch Zufall bin ich darauf gestoßen, dass Dateinamen u.U. auch solche Zeichen enthalten können:
![]() Ich hab ein Compare-Programm, mit dem ich die Directorys auslese und die Dateien mit einem anderen Directory vergleiche. Die Dateien vom Smartphone, wo junge Leute gern solche Zeichen in ihren Namen aufnehmen und wo diese dann in Dateinamen stehen, lassen sich mit meinem Programm nicht vergleichen, weil aus dem Record von FindFirst / FindNext mittels Record.name nicht die UTF-8-Zeichen, sondern stattdessen Fragezeichen übergeben werden. Der "normale" DIR Befehl liefert folgende Anzeige (analog FindFirst/FindNext)
Code:
Wenn ich den DIR-Befehl folgendermaßen ausführe, kommt ein UTF-8 Ergebnis
02.07.2019 08:32 <DIR> AB??C
02.07.2019 08:33 <DIR> DE?F 30.08.2018 21:05 72.931 Hase Handy?? 5? Test.jpg (Leider werden diese Zeichen bei [ Code ] hier im Forum nicht angezeigt, bei [ Quote ] schon
Code:
chcp 65001
DIR *.* >#dir65001.dir 02.07.2019 08:32 <DIR> AB��C 02.07.2019 08:33 <DIR> DE€F 30.08.2018 21:05 72.931 Hase Handy�� 5€ Test.jpg Zitat:
Code:
Da bekomme ich die korrekten Dateinamen und kann damit diese Dateien auch verarbeiten.
DirectoryInfo N1dirInfo = new DirectoryInfo(pN1Dir); // Directory
FileInfo[] N1FileArr = N1dirInfo.GetFiles(); // Datei-Informationen DirectoryInfo[] N1DirArr = N1dirInfo.GetDirectories("*.*"); // Unterordner-Informationen Gibt es in Delphi auch eine etwas modernere Funktion, mit der man Directorys lesen kann, also Dateinamen und auch Directory-Namen mit UTF-8 Zeichen ? |
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
In den neueren Delphis gibt es doch die Datei- bzw. Verzeichnisklasse. Hast du es damit schon mal probiert? Delphi bietet ja Jetzt auch eine vollständig Unicodeunterstützung.
|
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Hast du wirklich Delphi 10.3 im Einsatz oder doch nicht ein altes Delphi?
Ab D2009 sollte es kein Problem mehr damit geben, außer du verwendest eigenen Implementierung um das auszulesen, welche noch fest auf die ANSI-Version der API gebungenden sind. Ebenfalls ist die Verwendung von AnsiString "ungünstig", da diese natürlich Unicodestrings kaputt macht. |
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Hallo,
zur Not benutze Utf8Decode |
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Windows spricht entweder Ansi oder UTF-16 aber niemals UTF-8. Dein Code 55357;56476; entspricht 0xD83D 0xDC9C das ist Dein "Purple Heart" UTF-16 codiert.
|
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Zitat:
Wenn Du also eine zuverlässige Aussage über die verwendeten Zeichen(-Kodierung) treffen willst, geht kein Weg an einem HexDump vorbei. Gruß K-H |
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Zitat:
|
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Liste der Anhänge anzeigen (Anzahl: 2)
Hier die DIR-Listings als ASC und UTF8, auch HEX. Und die Version meines Delphi10.3.
|
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Liste der Anhänge anzeigen (Anzahl: 2)
Also bei mir spielt das ganz wunderbar seit Delphi 2009 (unter Benutzung Sysutils.Findfirst/Findnext). Anbei Demoprogramm mit Delphi 10.1. Da der String in SearchRec.Name UTF-16 codiert ist, hat jeder Char 16 Bit. Das erste Herz wird dann mit zwei Chars mit den Hexwerten $D83D, $DC9C codiert (so wie in Deinem Beispiel). Wenn man möchte kann man den String auch zu UTF-8 umkodieren. Dazu genügt die Umwandlung UTF8String(SearchRec.Name).
|
AW: Dateinamen mit UTF-8-Zeichen aus Directory lesen
Im Hex dump utf8 stehen sie doch richtig drin.
Bist Du sicher das dein Verwendeter Font diese Zeichen auch unterstützt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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 by Thomas Breitkreuz