2013-11-24 15 views
7
>>> import sys 
>>> sys.getfilesystemencoding() 
'UTF-8' 

Wie ändere ich das? Ich weiß, wie man die Standardsystemcodierung ändert.Wie ändert man Dateisystem-Kodierung über Python?

>>> reload(sys) 
<module 'sys' (built-in)> 
>>> sys.setdefaultencoding('ascii') 

Aber es gibt keine sys.setfilesystemencoding.

Antwort

3

Die Dateisystemcodierung ist in vielen Fällen eine inhärente Eigenschaft des Betriebssystems. Es kann nicht geändert werden - wenn Sie aus irgendeinem Grund Dateien mit Namen erstellen müssen, die anders codiert sind als die Dateisystemkodierung, verwenden Sie keine Unicode-Zeichenfolgen für Dateinamen. (Oder, wenn Sie Python verwenden 3, verwenden Sie ein Byte-Objekt anstelle eines String.)

See the documentation for details. Insbesondere zur Kenntnis, dass auf Windows-Systemen, das Dateisystem nativ Unicode, so ist keine Konvertierung tatsächlich stattfindet, und folglich ist es unmöglich, eine alternative Dateisystemcodierung zu verwenden.

4

Es gibt zwei Möglichkeiten, es zu ändern:

1) (Linux-only) export LC_CTYPE=en_US.UTF8 vor Python starten:

$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())' 
ANSI_X3.4-1968 
$ LC_CTYPE=C.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())' 
UTF-8 

Beachten Sie, dass LANG als Standardwert für LC_CTYPE dient, wenn es nicht eingestellt, während LC_ALL überschreibt sowohl LC_CTYPE und LANG)

2) monkeypatching:

import sys 
sys.getfilesystemencoding = lambda: 'UTF-8' 

Beide Methoden lassen Funktionen wie os.stat akzeptieren Unicode (Python2.x) Zeichenfolgen. Andernfalls verursachen diese Funktionen eine Ausnahme, wenn sie Nicht-ASCII-Symbole im Dateinamen sehen.

+0

Methode 1 funktioniert nicht oder ich – sureshvv

+0

@sureshvv Was ist Ihr Betriebssystem? –

+0

Ubuntu 16.04. Musste LANG = en_US.UTF8 zu/etc/environment hinzufügen und neustarten. – sureshvv

Verwandte Themen