2016-05-25 5 views
0

This Frage existiert auf dieser Website, aber es fehlerhaft ist, da es eine gibt <type 'str'> (beide bei der Verwendung von __file__ und wenn das Modul inspect verwenden) und keine <type 'unicode'>, die ich brauche, wie mein Pfad enthält nicht ASCII-Zeichen (hebräische Zeichen, um genau zu sein).Erster Unicode-Pfad des laufenden Skript

Wie kann ich den Pfad und den Dateinamen des aktuell ausgeführten Skripts in <type 'unicode'> in der Dateisystemcodierung abrufen? Gibt es irgendeine Unicode-freundliche Funktion, die dafür oder irgendeine Lösung eingebaut wird?

Nur Aufruf __file__.encode(sys.getfilesystemencoding()) schlägt mit ascii codec can't decode byte ... fehl.

Antwort

2

Sie benötigen .decode(), nicht .encode(). Um von unicode zu str zu gehen, codiert ein . Um in die andere Richtung zu gehen, entschlüsselt ein .

Versuchen:

import sys 
filename = __file__.decode(sys.getfilesystemencoding()) 
print type(filename), filename 

Ergebnis:

$ python 'קוֹבֶץ.py' 
<type 'unicode'> קוֹבֶץ.py 
+0

Es macht jetzt alles Sinn! Vielen Dank – Jonathan

+0

@ Jonathan: Hinweis: Der Fehler in Ihrer Frage ist wegen '.encode()' Methode versucht * zu decodieren * Ihre Bytestring mit 'sys.getdefaultencoding()' (das sollte auf Python 2 ASCII sein) vor Kodieren Sie es mit 'sys.getfilesystememoding()', das für darstellbare Zeichen funktioniert (unter Linux sollten Ihre lokalen Einstellungen korrekt sein). – jfs

1

Ich denke, man decode verwenden möchten statt encode:

>>> type('string'.encode('utf-8')) 
<type 'str'> 
>>> type('string'.decode('utf-8')) 
<type 'unicode'> 

Genrally, kehrt encode Bytestring, decode ein Unicode Objekt.

Verwandte Themen