Derzeit kodiert tar Dateinamen in UTF
Tatsächlich codiert/decodiert tar überhaupt keine Dateinamen, sondern kopiert sie einfach unverändert aus dem Dateisystem. Wenn Ihr Gebietsschema UTF-8-basiert ist (wie in vielen modernen Linux-Distributionen), ist das UTF-8. Leider ist die System-Codepage einer Windows-Box niemals UTF-8, daher werden die Namen immer verstümmelt, außer bei Tools wie WinRAR, die es ermöglichen, den verwendeten Zeichensatz zu ändern.
Daher ist es unmöglich, eine ZIP-Datei mit Nicht-ASCII-Dateinamen zu erstellen, die in den Windows-Versionen verschiedener Länder und deren integrierter Unterstützung für komprimierte Ordner funktionieren.
Es ist ein Mangel der tar- und zip-Formate, dass es keine festen oder bereitgestellten Codierungsinformationen gibt, sodass Nicht-ASCII-Zeichen immer nicht portierbar sind. Wenn Sie ein Nicht-ASCII-Archivformat benötigen, müssen Sie eines der neueren Formate verwenden, z. B. die neuesten 7z oder rar. Leider sind diese immer noch wackelig; in 7zip benötigen Sie den -mcu
wechseln, und rar verwendet immer noch nicht UTF-8, es sei denn, es erkennt Zeichen, die nicht in der Codepage enthalten sind.
Im Grunde ist es ein schreckliches Durcheinander, und wenn Sie es vermeiden können, Archive zu verteilen, die Dateinamen mit Nicht-ASCII-Zeichen enthalten, sind Sie viel besser dran.
Hier ist ein einfaches Python-Skript, das ich geschrieben habe, um Tar-Dateien von UNIX unter Windows zu entpacken:
import tarfile
archive_name = "archive_name.tar"
def recover(name):
return unicode(name, 'utf-8')
tar = tarfile.open(name=archive_name, mode='r', bufsize=16*1024)
updated = []
for m in tar.getmembers():
m.name = recover(m.name)
updated.append(m)
tar.extractall(members=updated)
tar.close()
Das Problem, unter Linux den Standard tar
zu verwenden (GNU tar), ist gelöst... Hinzufügen des --format=posix
Parameter beim Erstellen der Datei.
Zum Beispiel:
tar --format=posix -cf
Unter Windows verwende ich zum Extrahieren der Dateien bsdtar.
In https://lists.gnu.org/archive/html/bug-tar/2005-02/msg00018.html steht geschrieben (seit 2005 !!):
> Ich habe im ChangeLog etwas darüber gelesen, dass UTF-8 unterstützt wird. Was macht
> das heißt?
> Ich habe keine Möglichkeit gefunden, ein Archiv zu erstellen, das austauschbar wäre
> zwischen verschiedenen Orten.
Beim Erstellen von Archiven im POSIX.1-2001-Format (tar --format=posix oder --format=pax) konvertiert tar Dateinamen von den aktuellen Locales in UTF-8 und speichert sie dann im Archiv. Beim Extrahieren wird der umgekehrte Vorgang ausgeführt.
P.S. Anstatt --format=posix
einzugeben Sie können -H pax
eingeben , was kürzer ist.