如何更改Python的文件系統編碼(由sys.getfilesystemencoding()
返回)? 我的目標是在輸入Unicode路徑時使os.listdir
返回Unicode名稱,但這隻有在文件系統編碼也是Unicode時纔有效。更改Python文件系統編碼
該文件系統編碼用於編碼os.listdir(unicodestring)
輸出,默認情況下(如果沒有指定LC_*
環境變量)它是ASCII。
我試圖通過os.putenv
注入LC_ALL
,os.environ
,locale.setlocale
無濟於事;文件系統編碼不會改變。之後重新加載os
和sys
模塊也無濟於事。
實施例與LC_ALL指定:
$ env -i LC_ALL=en_US.UTF-8 python -c "import os; print os.listdir(u'.');"
[u'\u0435\u0449\u0433\u0441\u0440']
實施例與空環境:
$ env -i python -c "import os; print os.listdir(u'.');"
['\xd0\xb5\xd1\x89\xd0\xb3\xd1\x81\xd1\x80']
一種可能的解決方案將是包括在一個包裝啓動腳本環境變量,但是我寧願一種方法來來自Python內部。
文件系統編碼由操作系統設置... – MattDMo
@MattDMo在現代Linux上,假設它是UTF8是安全的。重點是沒有環境變量,Python無法確定實際的文件系統編碼,並且默認爲ASCII。 –