Не могу даже понять, где находится проблема ..
У меня есть виртуальная среда Python 3.6, у меня есть исходный файл Python, который я запускаю в этой среде - он в основном перечисляет файлы из папки и пытается их прочитать. Имена файлов могут иметь специальные символы.
Каждый раз, когда я запускаю исходный файл, когда он перечисляет файлы с глобусом, он использует ascii для декодирования имен файлов (отсюда и символы «?»), а sys.getfilesystemencoding () возвращает ascii,
хотя
когда я запускаю ту же команду glob в терминале, она использует кодировку utf-8 и правильно выводит имена файлов
Почему так?
Команда locale возвращает
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
Код:
import os, sys
import glob
folderpath = '<path_to_folder>'
def test():
files = [item for sublist in [glob.glob(os.path.join(folderpath, e)) for e in ['*.zip', '*.tar.gz']] for item in sublist]
try:
# select the 1st path
filepath = files[0]
print('filepath = ' + filepath)
print('fs_encoding = ' + sys.getfilesystemencoding())
print(sys.stdout.isatty())
except Exception as ex:
print(ex)
if __name__ == '__main__':
test()