2013-11-24 8 views

risposta

3

La codifica del file system è, in molti casi, una proprietà intrinseca del sistema operativo. Non può essere modificato - se, per qualche motivo, è necessario creare file con nomi codificati in modo diverso rispetto alla codifica del filesystem, non utilizzare stringhe Unicode per nomi di file. (Oppure, se si sta utilizzando Python 3, utilizzare un oggetto byte invece di una stringa.)

See the documentation for details. In particolare, si segnala che, su sistemi Windows, il file system è nativamente Unicode, quindi la conversione non è in realtà in atto, e, di conseguenza, è impossibile utilizzare una codifica di filesystem alternativa.

4

Ci sono due modi per cambiare è:

1) (solo Linux) export LC_CTYPE=en_US.UTF8 prima di lanciare pitone:

$ 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 

noti che LANG serve come valore di default per LC_CTYPE se non è set, mentre LC_ALL sostituisce sia LC_CTYPE e LANG)

2) monkeypatching:

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

Entrambi i metodi consentono a funzioni come os.stat di accettare stringhe unicode (python2.x). Altrimenti queste funzioni generano un'eccezione quando vedono simboli non ascii nel nome file.

+0

metodo 1 non funzionante o me – sureshvv

+0

@sureshvv Qual è il tuo sistema operativo? –

+0

Ubuntu 16.04. Dovevo aggiungere LANG = en_US.UTF8 a/etc/environment e riavviare. – sureshvv