it-swarm.com.de

Wie kann ich ein Zip-Archiv von Dateien mit hebräischen Namen korrekt dekomprimieren?

Jemand hat mir eine Zip-Datei mit Dateien mit hebräischen Namen gesendet (und unter Windows erstellt, nicht sicher, mit welchem ​​Tool). Ich benutze LXDE auf Debian Stretch. Der Gnome-Archivmanager schafft es, die Datei zu entpacken, aber die hebräischen Zeichen sind verstümmelt. I think Ich erhalte UTF-8-Oktette, die zu Unicode-Zeichen erweitert wurden, z. Ich habe eine Datei, deren Name vier Zeichen und eine .doc-Suffik hat, und die Zeichen sind: 0x008E 0x0087 0x008E 0x0085. Die Verwendung des Befehlszeilen-Dienstprogramms zum Entpacken ist noch schlimmer - es weigert sich, vollständig zu dekomprimieren, und beschwert sich über ein "ungültiges oder unvollständiges Multibyte- oder Wide-Zeichen".

Meine Fragen sind also:

  • Gibt es ein anderes Dekomprimierungsprogramm, das meine Dateien mit den richtigen Namen dekomprimiert?
  • Stimmt etwas nicht mit der Art und Weise, wie die Datei komprimiert wurde, oder ist es nur eine Inkompatibilität von Zip-Implementierungen? Oder sogar Fehlfunktion/Fehler der Linux Zip-Dienstprogramme?
  • Was kann ich tun, um die richtigen Dateinamen zu erhalten, nachdem ich sie mit den verstümmelten dekomprimiert habe?
19
einpoklum

Es hört sich so an, als ob die Dateinamen in einer der proprietären Codepages von Windows ( CP862 , 1255 usw.) codiert sind.

  • Gibt es ein anderes Dekomprimierungsprogramm, das meine Dateien mit den richtigen Namen dekomprimiert? Mir ist kein Zip-Dienstprogramm bekannt, das diese Codepages nativ unterstützt. 7z hat ein gewisses Verständnis für Codierungen, aber ich glaube, es muss eine Codierung sein, die Ihr System allgemeiner kennt (Sie wählen sie aus, indem Sie die Umgebungsvariable LANG festlegen), und Windows-Codepages gehören wahrscheinlich nicht dazu.

    unzip -UU Sollte über die Befehlszeile funktionieren, um Dateien mit den richtigen Bytes im Namen zu erstellen (durch Deaktivieren der gesamten Unicode-Unterstützung). Dies ist wahrscheinlich der Effekt, den Sie bereits mit dem GNOME-Tool erzielt haben. Die Codierung ist in beiden Fällen nicht richtig, aber wir können das unten beheben.

  • Stimmt etwas mit der Art und Weise, wie die Datei komprimiert wurde, nicht oder ist es nur eine Inkompatibilität von Zip-Implementierungen? Oder sogar Fehlfunktion/Fehler der Linux Zip-Dienstprogramme? Die Datei, die Sie erhalten haben, wurde nicht portabel erstellt. Das ist nicht unbedingt falsch für eine interne Verwendung, bei der die Codierung festgelegt und im Voraus bekannt ist, obwohl die Formatspezifikation besagt, dass Namen entweder UTF-8 oder cp437 sein sollen und Ihre keine. Selbst zwischen Windows-Computern funktioniert die Verwendung unterschiedlicher Codepages nicht gut, aber Nicht-Windows-Computer haben zunächst kein Konzept für diese Codepages. Die meisten Tools UTF-8 codieren ihre Dateinamen (was immer noch nicht ausreicht, um Probleme zu vermeiden).

  • Was kann ich tun, um die richtigen Dateinamen zu erhalten, nachdem ich sie mit den verstümmelten Dateinamen dekomprimiert habe? Wenn Sie die Codierung der Dateinamen identifizieren können, können Sie die Bytes konvertieren in den vorhandenen Namen in UTF-8 und verschieben Sie die vorhandenen Dateien auf den richtigen Namen. Das Tool convmv fasst diesen Prozess im Wesentlichen in einem einzigen Befehl zusammen: convmv -f cp862 -t utf8 -r . Versucht, alles in . Von cp862 nach UTF-8 zu konvertieren.

    Alternativ können Sie iconv und find verwenden, um alles auf den richtigen Namen zu verschieben. Etwas wie:

    find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp862 -t utf8)"' sh {} \;
    

    findet alle Dateien unter dem aktuellen Verzeichnis und versucht, die Namen in UTF-8 zu konvertieren.

    In beiden Fällen können Sie mit verschiedenen Codierungen experimentieren und versuchen, eine sinnvolle zu finden.


Wenn Sie diese Dateien in die andere Richtung zurücksenden möchten, haben Sie möglicherweise das gleiche Problem am anderen Ende, nachdem Sie die Codierung für Sie festgelegt haben. In diesem Fall können Sie den Vorgang umkehren, bevor Sie die Dateien mit -UU Komprimieren, da es auf Windows-Seite wahrscheinlich sehr schwierig ist, dies zu beheben.

17
Michael Homer

Ich hatte Erfolg mit dem Befehl 7z x <source.Zip>.

Ausführung:

p7Zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,[...])

Potenziell relevante Umgebung:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LC_CTYPE=UTF-8

Es war in der Lage, alle Dateien mit 8-Bit-Zeichen in ihren Dateinamen zu dekomprimieren, wobei einige dieser Zeichen übersprungen und andere verstümmelt wurden.

8
vszakats

Ich hatte gerade das gleiche Problem und es stellt sich heraus, dass meine Version von unzip, die in Ubuntu-Repositories (UnZip 6.00 of 20 April 2009, by Debian. Original by Info-Zip.) Verfügbar ist, die automatische Dekodierung von Dateinamen verarbeiten kann, wenn Sie -a Schalter.

unzip -a stupid.Zip
6
Igor Zinov'yev

Ich hatte Glück mit dieser Kombination:

export LANG=es_MX 
7z x file.Zip
convmv -f cp437 -t utf8 -r .

füge --notes zu convmv hinzu, um sie tatsächlich umzubenennen. Später fand ich noch bessere Version:

LANG=es_MX.cp437 unzip -UU file.Zip
convmv -f cp437 -t utf8 -r . --notest
2
asdjfiasd

Ich hatte ein ähnliches Problem beim Dekodieren eines Zip-Archivs mit kyrillischen Zeichen. Ein einzeiliges Skript python hat den Job richtig gemacht:

#!/usr/bin/python

import zipfile
import sys

zipfile.ZipFile(sys.argv[1], 'r').extractall(sys.argv[2] if len(sys.argv) > 2 else '.')

Dann nenne es einfach unzip_enc und nenne es unzip_enc Zip_FILE [TARGET_DIR]

Für mich weder die unzip -UU, unzip -a Noch LANG* Umgebungsvariablen haben nichts gebracht.

2

Ich habe das Zip-Archiv unter Linux komprimiert (über die Befehlszeile) und Dateinamen mit diakritischen Zeichen werden unter Windows nicht korrekt dekomprimiert, aber ich habe es erfolgreich mit der Software Bandizip entpackt, mit der Zeichensätze in der Symbolleiste festgelegt werden können.

0
Miro Junker