AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Unicode-Dateinamen arbeiten

Ein Thema von blablab · begonnen am 19. Mai 2012 · letzter Beitrag vom 12. Jul 2012
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 16:21
Hallo!

Gibt es eine Möglichkeit bei Dateinamen volle Unicode-Unterstützung zu bieten? Ich benutze FindFirstFile und FindNextFile. Da gibt es ja FindNextFileW, wo er mit WideStrings arbeitet. Aber WideString unterstützt ja auch nicht alle Unicode-Zeichen. Gibt es auch eine Möglichkeit MultiByteStrings auszulesen? Oder kann ich höchstens WideStrings auslesen und die dann in MultiByteStrings umwandeln? Denn damit hätte ich ja keine vollständige Unicode-Unterstützung...

Und zu den MultiByteStrings hätte ich noch eine Frage:
Mir ist aufgefallen, dass (zumindest an einer Stelle im Delphicode) MultiByte-Zeichensätze nur berücksichtigt werden wenn SysLocale.FarEast = True gilt. Das find ich irgendwie komisch, denn auch wenn mein Gebietsschema auf "deutsch" eingestellt ist, kann ich doch mal auf eine Datei mit Unicode-Zeichensatz stoßen.
Im Normalfall wird mir also wahrscheinlich kein Unicode-Zeichen begegnen, aber ich möchte trotzdem Unicode unterstützen. Muss ich dann beim ProgrammStart SysLocale.FarEast auf True setzen, oder wie ist das gedacht?

(Ich benutze übrigens Delphi7...)

Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 16:39
Bei den Unicode-Funktionen wird mit PWideChar gearbeitet. Da Windows damit auch intern arbeitet, wirst du wohl kaum Zeichen in ein Dateisystem hineinbekommen, die du unter Windows nutzen kannst und damit nicht nutzbar sind.

Bei Delphi 7 hast du nun einmal noch keine echte Unicodeunterstützung, insbesondere in der Oberfläche. Wenn du das willst, wäre eine neue Delphiversion sehr sinnvoll (Delphi 2009+), wo der Standard-String ein UnicodeString ist.
In Delphi 7 heute noch mit TntControls oder ähnlichem herumzufrickeln und einen enormen Aufwand zu betreiben nur um hinterher bei einem Umstieg auf eine aktuelle Delphiversion irgendwann viel davon wegzuwerfen... meiner Meinung nach lohnt das nicht...

Wenn heute noch Delphi 7, dann besser ohne Unicode. (Das gilt vor allem für die Benutzeroberfläche.)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 16:59
Wobei FindFirst auch ohne Unicode ganz gut funktioniert.

Bis mindestens Win7/NTFS gibt es für Dateinamen alternativ noch einen "kurzen" Dateinamen im 8.3-Format,
über welchen man mit den ANSI-Funktionen zugreifen kann.

Wenn es unbedingt Unicode sein muß, dann kann man immernoch direkt auf die Unicode-WinAPI (MSDN-Library durchsuchenFindFirstFileW) ausweichen, was selbst mit Windows 7 problemlos möglich ist.
Falls man sowieso auf NonVCL setzt, dann ist es egal, was man nutzt, denn das geht genauso gut in NonUnicodeDelphis. (nur TStringList fehlt ... Bei Google suchenTTntTStringList)
$2B or not $2B

Geändert von himitsu (19. Mai 2012 um 17:01 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 17:07
Beste Lösung: Kauf dir Delphi XE2 und nutze die vollständige Unicode-Unterstützung der VCL

Zweitbeste Lösung: Such dir noch einen freien Download der TNTWare-Komponenten (oder kauf das aktuelle Package bei TMS Software). Dort gibt es viel API-Funtionen Widestring-Enabled so das sie auch unter Win9x (Als Ansi-Version) funktionieren.

Und Widestring ist 100% Unicodefähig da seit Windows 2000 statt UCS2 UTF16 verwendet wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 19:51
Wenn Windows selbst nur mit WideChars arbeitet, dann reicht mir diese nicht ganz 100%ige Unicode-Unterstützung natürlich auch. Ich dachte nur, wenn ich schon extra eine Unicode-Unterstützung programmieren will, dann will ich es auch gleich ganz machen.

Aber das mit dem SysLocale.FarEast := True macht mich immernoch etwas stutzig. Ist das die "normale" Herangehensweise um (bei Delphi7) mit MultiByte-Strings zu arbeiten? Denn wie gesagt werde ich eher selten auf Unicode stoßen und dann wäre es mir am liebsten ich könnte mir die 50% Speicherplatz sparen...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 19:58
Ich kann dir nur den Tipp geben deine Anwendung komplett Unicodefähig zu machen.
Die in älteren Delphi-Version "mögliche" Lösung mit Charset/Codepages ist eine Krückenlösung die mehr Probleme verursacht als löst.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Mit Unicode-Dateinamen arbeiten

  Alt 19. Mai 2012, 20:38
Windows nutzt intern UTF-16 genau wie Delphi auch.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Mit Unicode-Dateinamen arbeiten

  Alt 12. Jul 2012, 17:30
@Luckie: Heißt das die Windowsfunktionen xyzW geben UTF-16 und nicht UCS-2 Werte zurück?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Mit Unicode-Dateinamen arbeiten

  Alt 12. Jul 2012, 17:44
@Luckie: Heißt das die Windowsfunktionen xyzW geben UTF-16 und nicht UCS-2 Werte zurück?
Bis Windows NT waren es UCS-2 Werte, ab W2k sind es UTF-16 Werte.
Aber solange du nur Zeichen verarbeiten will die in der Base Plane liegent macht das keinen Unterschied.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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