Umgang mit Unicode-Verzeichnis und Dateinamen in Perl unter Windows

8

Ich habe ein Codierungsproblem mit Perl und Windows. Auf einem Windows 7 mit Perl (Erdbeere 5.16) und einer einfachen TK-GUI muss ich Dateien öffnen und / oder auf Verzeichnisse mit nicht-englischen Zeichen in ihrem Namen / Pfad zugreifen. Zum Öffnen von Dateien habe ich diese Lösung gefunden, die gut zu funktionieren scheint:

%Vor%

Dies öffnet Dateien wie zB / Поиск.txt

korrekt

Was ich NICHT tun kann, ist einfach einen Verzeichnispfad zu bekommen und dann zu verarbeiten. Ich denke, ich sollte Win32 :: Unicode :: Dir verwenden, aber ich kann die Dokumentation wirklich nicht verstehen.

Es sollte so etwas sein:

%Vor%     
Kelly O'brian 28.06.2013, 17:00
quelle

1 Antwort

1

Es gibt einen logischen Fehler in:

%Vor%

$wdir->open('path') gibt ein Objekt und keine Zeichenfolge zurück. Du kannst es nicht wie einen Pfad benutzen. Aber das ist nicht das Schlimmste. Leider scheint die Tk-Implementierung noch keine Unterstützung für Unicode-Dateinamen (einschließlich chooseDirectory) zu haben. Ich denke, du wirst einen benutzerdefinierten Richtungswähler schreiben müssen, aber ich bin mir nicht sicher, ob es überhaupt möglich ist.

Dies ist in der Lage, Dateien in einem ascii-chars-Ordner aufzulisten (und - & gt; fetch kann utf-8-Dateien auflisten) und stürzt beim Öffnen eines Ordners mit utf-8-Zeichen ab. Nun, um fair zu sein, stürzt es beim Öffnen von ?????? ab.

%Vor%

Auslesen (Öffnen von /):

Beide Beispiele wurden unter Verwendung von Strawberry Perl 5.12.3 für MSWin32-x64-Multi-Thread

erstellt %Vor%

Sample out (öffnendes Elternteil von Поиск):

%Vor%

Fazit

Der Tk dir Selektor kehrt zurück ????? anstelle von Поиск. Bei der Suche nach einer Möglichkeit, Unicode in Tk zu aktivieren, habe ich Folgendes gefunden:

Ссылка :

  

(...) Leider gibt es in Perl noch immer Unwissende   Unicode. Einer dieser Orte sind Dateinamen. Folglich die Dateiselektoren   In Perl / Tk wird die Codierung von Dateinamen nicht korrekt gehandhabt. Zur Zeit sie   Angenommen, die Dateinamen sind mindestens in Unix-Systemen in ISO-8859-1 kodiert.   Sobald Perl ein Konzept für Dateinamencodierungen hat, wird auch Perl / Tk   implementieren solche Systeme.

Auf den ersten Blick scheint es also unmöglich zu sein, was du versuchst (außer du Schreibe oder finde einen benutzerdefinierten Dir-Selektor). Eigentlich ist es vielleicht keine schlechte Idee Übermitteln Sie diesen Fehler, weil die GUI "Suche" anzeigt, so dass der Fehler im Rückgabewert liegt.

    
quelle

Tags und Links