Кодировка символов Python 3 в Linux - PullRequest
0 голосов
/ 01 ноября 2018

Не могу даже понять, где находится проблема ..
У меня есть виртуальная среда 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...