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:
Der Fehler ist:
%Vor%Update 1: Ich benutze Python 2.7 unter Windows 7
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 ...
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% Geben Sie den Dateinamen als unicode
string für den Aufruf open
an.
Wie produzieren Sie den Dateinamen?
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:
Rufen Sie den Inhalt des Verzeichnisses mit unicode
dirspec:
Ö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).
Mach a:
%Vor%vor dem Öffnen der Datei; Ersetzen Sie die korrekte Codierung, wenn nicht "utf8".
Tags und Links python url-encoding path file