При вызове tarfile.open
,
tarfile.open('arhivename.tar.gz', encoding='utf-8')
Параметр encoding
управляет кодированием имен файлов, а не кодированием содержимого файла.Параметр encoding
не имеет смысла контролировать кодирование содержимого файла, поскольку разные файлы внутри файла tar могут кодироваться по-разному.Таким образом, файл tar на самом деле содержит только двоичные данные.
Вы можете декодировать эти данные, обернув файл с помощью потокового считывателя UTF-8 из модуля codecs
:
import codecs
utf8reader = codecs.getreader('utf-8')
for name in tar.getmembers():
fp = utf8reader(tar.extractfile(name))