Derzeit codiert tar Dateinamen in UTF
Eigentlich codiert / decodiert tar keine Dateinamen, sondern kopiert sie einfach so wie sie sind aus dem Dateisystem. Wenn Ihr Gebietsschema UTF-8-basiert ist (wie in vielen modernen Linux-Distributionen), ist dies UTF-8. Leider ist die System-Codepage einer Windows-Box niemals UTF-8, sodass die Namen immer unkenntlich gemacht werden, außer bei Tools wie WinRAR, mit denen der verwendete Zeichensatz geändert werden kann.
Aus diesem Grund ist es nicht möglich, eine ZIP-Datei mit Nicht-ASCII-Dateinamen zu erstellen, die in verschiedenen Länderversionen von Windows und der integrierten Unterstützung für komprimierte Ordner funktionieren.
Es ist ein Nachteil der Formate tar und zip, dass es keine festen oder bereitgestellten Codierungsinformationen gibt, sodass Nicht-ASCII-Zeichen immer nicht portierbar waren. Wenn Sie ein Nicht-ASCII-Archivformat benötigen, müssen Sie eines der neueren Formate verwenden, z. B. das aktuelle 7z oder rar. Leider sind diese immer noch wackelig; In 7zip benötigen Sie den -mcu
Schalter, und rar verwendet UTF-8 nur dann, wenn Zeichen erkannt werden, die nicht in der Codepage enthalten sind.
Grundsätzlich ist es ein schreckliches Durcheinander, und wenn Sie vermeiden können, Archive mit Dateinamen mit Nicht-ASCII-Zeichen zu verteilen, sind Sie viel besser dran.
Hier ist ein einfaches Python-Skript, das ich geschrieben habe, um TAR-Dateien von UNIX unter Windows zu entpacken:
quelle
Das Problem, das unter Linux die Standardeinstellung
tar
(GNU tar) verwendet, ist behoben ... Hinzufügen des--format=posix
Parameters beim Erstellen der Datei.Zum Beispiel:
tar --format=posix -cf
In Windows verwende ich bsdtar , um die Dateien zu extrahieren .
In https://lists.gnu.org/archive/html/bug-tar/2005-02/msg00018.html ist geschrieben (seit 2005 !!):
PS Anstatt zu
--format=posix
tippen-H pax
, können Sie tippen , was kürzer ist.quelle
Ich glaube, Sie haben Probleme mit dem Zip-Container-Format. Teer kann unter dem gleichen Problem leiden.
Verwenden Sie stattdessen die Archivformate 7zip (
.7z
) oder RAR (.rar
). Beide sind für Windows und Linux verfügbar. Diep7zip
Software verarbeitet beide Formate.Ich Schaffung gerade getestet
.7z
,.rar
,.zip
, und.tar
Dateien sowohl auf WinXP und Debian 5 und die.7z
und.rar
Dateien speichern / wiederherstellen Dateinamen korrekt , während die.zip
und.tar
Dateien nicht. Es spielt keine Rolle, auf welchem System das Testarchiv erstellt wird.quelle
Ich hatte Probleme mit dem Entpacken
tar
und mitzip
Dateien, die ich von Windows-Benutzern erhalte. Während ich die Frage "Wie erstelle ich das Archiv, das funktionieren wird" nicht beantworte, helfen die folgenden Skripte beim Entpackentar
undzip
korrekten Speichern von Dateien, unabhängig vom ursprünglichen Betriebssystem.ACHTUNG: man muss manuell die Quellencodierung abzustimmen (
cp1251
, diecp866
in den Beispielen unten). Befehlszeilenoptionen können in Zukunft eine gute Lösung sein.Teer:
Postleitzahl:
UPD 2018-01-02 : Ich verwende
chardet
package, um die korrekte Codierung des unformatierten Datenblocks zu erraten. Jetzt funktioniert das Skript auf allen meinen schlechten und guten Archiven sofort.Dinge zu beachten:
chardet
funktioniert nicht mit einem normalen Unicode-Objekt).Endgültige Version:
quelle
POSIX-1.2001 spezifizierte, wie TAR UTF-8 verwendet.
Ab 2007 wurde in der Änderungsprotokollversion 6.3.0 in PKZIP APPNOTE.TXT ( http://www.pkware.com/documents/casestudies/APPNOTE.TXT ) angegeben, wie ZIP UTF-8 verwendet.
Nur welche Tools diese Standards ordnungsgemäß unterstützen, bleibt offen.
quelle