Python kann Dateien mit nicht-englischen Zeichen im Pfad nicht öffnen

8

Ich habe eine Datei mit folgendem Pfad: D: / bar / ク レ イ · ヒ ヒ ッ ツ! / foo.abc

Ich analysiere den Pfad aus einer XML-Datei und speichere ihn in einer Variablen namens path in Form von file://localhost/D:/bar/クレイジー・ヒッツ!/foo.abc Dann werden die folgenden Operationen ausgeführt:

%Vor%

Der Fehler ist:

%Vor%

Update 1: Ich benutze Python 2.7 unter Windows 7

    
bcosynot 12.05.2011, 07:16
quelle

3 Antworten

4

Der Pfad in Ihrem Fehler ist:

%Vor%

Ich denke, das ist die UTF8-kodierte Version Ihres Dateinamens.

Ich habe einen Ordner mit dem gleichen Namen unter Windows7 erstellt und eine Datei namens 'abc.txt' darin abgelegt:

%Vor%

So scheint es, dass Duncans Vorschlag von path.decode('utf8') den Trick macht.

Aktualisieren

Ich kann das nicht für Sie testen, aber ich schlage vor, dass Sie versuchen, zu überprüfen, ob der Pfad Nicht-ASCII enthält, bevor Sie .decode('utf8') ausführen. Das ist ein bisschen hacky ...

%Vor%     
MattH 12.05.2011, 09:27
quelle
1

Hier finden Sie einige interessante Dinge aus der Dokumentation :

  

sys.getfilesystemencoding ()

     

Gib den Namen der verwendeten Kodierung zurück   Konvertieren von Unicode-Dateinamen in   Systemdateinamen oder Keine, wenn der   Systemstandardcodierung wird verwendet. Das   der Ergebniswert hängt vom Betrieb ab   System: Unter Mac OS X ist die Codierung   "UTF-8". Unter Unix ist die Kodierung die   Benutzerpräferenz nach der   Ergebnis von nl_langinfo (CODESET), oder   Keine wenn die nl_langinfo (CODESET)   gescheitert. Unter Windows NT + sind Dateinamen   Unicode nativ, also keine Konvertierung   durchgeführt. getfilesystemencodierung ()   gibt immer noch 'mbcs' zurück, da dies der ist   Kodierung, die Anwendungen verwenden sollten   wenn sie explizit konvertieren möchten   Unicode-Strings zu Byte-Strings, die   sind äquivalent, wenn sie als Datei verwendet werden   Namen. Unter Windows 9x ist die Codierung   "mbcs".

     

Neu in Version 2.3.

Wenn ich das richtig verstehe, sollten Sie den Dateinamen als Unicode übergeben:

%Vor%     
codeape 12.05.2011 08:34
quelle
1

Geben Sie den Dateinamen als unicode string für den Aufruf open an.

Wie produzieren Sie den Dateinamen?

falls von Ihnen als Konstante bereitgestellt

Fügen Sie eine Zeile am Anfang Ihres Skripts hinzu:

%Vor%

Setzen Sie dann in einem UTF-8-fähigen Editor path auf unicode filename:

%Vor%

liest aus einer Liste von Verzeichnisinhalten

Rufen Sie den Inhalt des Verzeichnisses mit unicode dirspec:

ab %Vor%

liest aus einer Textdatei

Öffnen Sie den Dateiname, der die Datei enthält, mit codecs.open , um unicode data zu lesen. Sie müssen die Codierung der Datei angeben (weil Sie wissen, was der "Standard-Windows-Zeichensatz" für Nicht-Unicode-Anwendungen auf Ihrem Computer ist).

auf jeden Fall

Mach a:

%Vor%

vor dem Öffnen der Datei; Ersetzen Sie die korrekte Codierung, wenn nicht "utf8".

    
tzot 12.05.2011 10:11
quelle

Tags und Links