В настоящее время tar кодирует имена файлов в UTF
На самом деле tar вообще не кодирует / не декодирует имена файлов, он просто копирует их из файловой системы как есть. Если ваша локаль основана на UTF-8 (как во многих современных дистрибутивах Linux), это будет UTF-8. К сожалению, системная кодовая страница Windows-блока никогда не является UTF-8, поэтому имена всегда будут искажены, за исключением таких инструментов, как WinRAR, которые позволяют изменять кодировку.
Таким образом, невозможно создать ZIP-файл с именами, отличными от ASCII, которые работают в разных версиях Windows и поддерживают встроенные сжатые папки.
Недостатком форматов tar и zip является отсутствие фиксированной или предоставленной информации о кодировке, поэтому символы, не входящие в ASCII, всегда будут непереносимыми. Если вам нужен формат архива не ASCII, вам придется использовать один из более новых форматов, например, последний 7z или rar. К сожалению, они все еще шаткие; в 7zip вам нужен -mcu
переключатель, и rar по-прежнему не будет использовать UTF-8, если не обнаружит символы, отсутствующие в кодовой странице.
По сути, это ужасный беспорядок, и если вы сможете избежать распространения архивов, содержащих имена файлов с не-ASCII-символами, вам будет намного лучше.
Вот простой скрипт Python, который я написал для распаковки tar-файлов из UNIX в Windows:
источник
Проблема с использованием в Linux по умолчанию
tar
(GNU tar) решена ... добавлением--format=posix
параметра при создании файла.Например:
tar --format=posix -cf
В Windows для распаковки файлов я использую bsdtar .
В https://lists.gnu.org/archive/html/bug-tar/2005-02/msg00018.html написано (с 2005 года !!):
PS Вместо набора текста
--format=posix
вы можете печатать-H pax
, что короче.источник
Я полагаю, что у вас возникли проблемы с самим форматом контейнера Zip. Тар может страдать от той же проблемы.
Используйте 7zip (
.7z
) или RAR (.rar
) форматы архивов вместо. Оба доступны для Windows и Linux;p7zip
программное обеспечение обрабатывает оба формата.Я просто проверял , создающего
.7z
,.rar
,.zip
и.tar
файлы на обоих WinXP и Debian 5, а.7z
и.rar
хранения файлов / восстановить имена файлов правильно в то время как.zip
и.tar
файлы не делают. Неважно, какая система используется для создания тестового архива.источник
У меня были проблемы с распаковкой
tar
иzip
файлами, которые я получаю от пользователей Windows. Хотя я не отвечаю на вопрос «как создать архив, который будет работать», приведенные ниже сценарии помогают правильно распаковыватьtar
иzip
файлы независимо от оригинальной ОС.ВНИМАНИЕ: необходимо настроить источник кодирующих вручную (
cp1251
,cp866
в примерах ниже). Параметры командной строки могут быть хорошим решением в будущем.Деготь:
Zip:
UPD 2018-01-02 : Я использую
chardet
пакет, чтобы угадать правильную кодировку необработанного фрагмента данных. Теперь скрипт работает "из коробки" на всех моих плохих архивах, а также на хороших.Что следует отметить:
chardet
не работает с обычным объектом Unicode).Окончательный версия:
источник
В POSIX-1.2001 указано, как TAR использует UTF-8.
Начиная с 2007 года в версии журнала изменений 6.3.0 в приложении PKZIP APPNOTE.TXT ( http://www.pkware.com/documents/casestudies/APPNOTE.TXT ) указано, как ZIP использует UTF-8.
Только то, какие инструменты поддерживают эти стандарты должным образом, остается открытым вопросом.
источник