Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change file system encoding via python?

>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'

How do I change that? I know how to change the default system encoding.

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

But there is no sys.setfilesystemencoding.

like image 743
arjunaskykok Avatar asked Nov 24 '13 06:11

arjunaskykok


1 Answers

There are two ways to change it:

  1. (linux-only) export LC_CTYPE=en_US.UTF-8 before launching python:
$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())'
ANSI_X3.4-1968
$ LC_CTYPE=en_US.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())'
UTF-8

Note that LANG serves as the default value for LC_CTYPE if it is not set, while LC_ALL overrides both LC_CTYPE and LANG)

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

Both methods let functions like os.stat accept unicode (python2.x) strings. Otherwise those functions raise an exception when they see non-ascii symbols in the filename.

Update: In the (1) variant the locale has to be available (present in locale -a) for this setting to have the desired effect.

like image 131
Antony Hatchkins Avatar answered Oct 02 '22 15:10

Antony Hatchkins