Jemand hat mir eine ZIP-Datei gesendet, die Dateien mit hebräischen Namen enthält (und unter Windows erstellt wurde, nicht sicher, mit welchem Tool). Ich benutze LXDE auf Debian Stretch. Der Gnome-Archivmanager kann die Datei entpacken, aber die hebräischen Zeichen sind verstümmelt. Ich glaube, ich bekomme UTF-8-Oktette in Unicode-Zeichen erweitert, z. B. habe ich eine Datei, deren Name vier Zeichen und ein .doc-Suffic enthält, und die Zeichen sind: 0x008E 0x0087 0x008E 0x0085. Die Verwendung des Befehlszeilen-Dekomprimierungsprogramms ist noch schlimmer - es lehnt es ab, vollständig zu dekomprimieren, und beklagt sich über ein "ungültiges oder unvollständiges Multibyte- oder Breitzeichen".
Meine Fragen lauten also:
- Gibt es ein anderes Dekomprimierungsprogramm, das meine Dateien mit den richtigen Namen dekomprimiert?
- Stimmt etwas mit der Komprimierung der Datei nicht, oder ist es nur eine Inkompatibilität von ZIP-Implementierungen? Oder sogar Fehlfunktionen / Fehler der Linux-ZIP-Dienstprogramme?
- Was kann ich tun, um die richtigen Dateinamen zu erhalten, nachdem ich sie mit den verstümmelten dekomprimiert habe?
character-encoding
zip
unicode
file-format
einpoklum - Monica wieder einsetzen
quelle
quelle
Antworten:
Es hört sich so an, als ob die Dateinamen in einer der proprietären Windows-Codepages ( 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 versteht etwas von Codierungen, aber ich glaube, es muss sich um eine Codierung handeln, die Ihr System im Allgemeinen kennt (Sie wählen sie durch Festlegen der
LANG
Umgebungsvariablen), und Windows-Codepages gehören wahrscheinlich nicht dazu.unzip -UU
sollten von der Befehlszeile aus arbeiten, um Dateien mit den richtigen Bytes im Namen zu erstellen (indem Sie die gesamte Unicode-Unterstützung deaktivieren). Dies ist wahrscheinlich der Effekt, den Sie bereits mit GNOME erzielt haben. Die Kodierung ist in beiden Fällen nicht richtig, aber wir können das unten beheben.Stimmt etwas mit der Komprimierung der Datei nicht, oder ist es nur eine Inkompatibilität von ZIP-Implementierungen? Oder sogar Fehlfunktionen / Fehler der Linux-ZIP-Dienstprogramme? Die Datei, die Sie erhalten haben, wurde nicht portabel erstellt. Dies ist nicht unbedingt falsch für eine interne Verwendung, bei der die Kodierung fest und im Voraus bekannt ist, obwohl die Formatspezifikation besagt, dass Namen entweder UTF-8 oder cp437 sein sollen und Ihre auch nicht. Selbst zwischen Windows-Computern funktioniert die Verwendung verschiedener Codepages nicht gut, aber Nicht-Windows-Computer kennen diese Codepages von Anfang an nicht. Die meisten Tools codieren ihre Dateinamen in UTF-8 (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 dekomprimiert habe? Wenn Sie die Kodierung der Dateinamen identifizieren können, können Sie die Bytes in den vorhandenen Namen in UTF-8 konvertieren und die vorhandenen Dateien an den richtigen Namen verschieben. Das
convmv
Tool fasst diesen Prozess im Wesentlichen in einem einzigen Befehl zusammen: Esconvmv -f cp862 -t utf8 -r .
wird versucht, alles in.
cp862 nach UTF-8 zu konvertieren .Alternativ können Sie
iconv
und verwendenfind
, um alles auf die richtigen Namen zu verschieben. Etwas wie:findet alle Dateien unter dem aktuellen Verzeichnis und versucht, die Namen in UTF-8 umzuwandeln.
In beiden Fällen können Sie mit verschiedenen Codierungen experimentieren und versuchen, eine zu finden, die Sinn ergibt.
Nachdem Sie die Kodierung für Sie behoben haben, können Sie das gleiche Problem am anderen Ende haben, wenn Sie diese Dateien in die andere Richtung zurücksenden möchten. In diesem Fall können Sie den Vorgang umkehren, bevor Sie die Dateien komprimieren
-UU
, da es auf Windows-Seite wahrscheinlich sehr schwierig ist, den Fehler zu beheben.quelle
rar
oder sichp7zip
weigern, ZIP-Archive zu verarbeiten. Gibt es eine Möglichkeit, ein Archiv mit Dateinamen in proprietären Codierungen unter Linux zu extrahieren? Wenn ich mit extrahiereunzip
, erhalte ich eine Fehlermeldung: "Fehler: ╨и╨ / Ship_╨п kann nicht erstellt werden ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Dateiname zu lang "LANG=ru_RU.CP1251; unzip Bleed.zip
(in meinem Fall war es die kyrillische Kodierung). Jetzt frage ich mich, wie ich mein System so einrichten kann, dass ich solche .zip-Dateien standardmäßig in der GUI korrekt öffnen kann.unzip -UU foo.zip
arbeitete für türkische CharaktereIch hatte Erfolg mit dem Befehl
7z x <source.zip>
.Ausführung:
Potenziell relevantes Umfeld:
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.
quelle
Ich hatte gerade das gleiche Problem und es stellte sich heraus, dass meine Version
unzip
von Ubuntu Repositories (UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
) die automatische Dekodierung von Dateinamen handhaben kann, wenn Sie den-a
Schalter angeben .quelle
unzip
der-a
Switch um das Konvertieren von Textdateien. Keine Dateinamen.Ich hatte ein ähnliches Problem beim Entschlüsseln eines Zip-Archivs mit kyrillischen Zeichen. Ein einzeiliges Python-Skript erledigte die Aufgabe ordnungsgemäß:
Dann ruf es einfach an
unzip_enc
und ruf es anunzip_enc ZIP_FILE [TARGET_DIR]
Für mich weder
unzip -UU
,unzip -a
nochLANG*
taten Umgebungsvariablen etwas Gutes.quelle
Ich hatte Glück mit dieser Kombination:
add --notest to convmv für die tatsächliche Umbenennung. Später habe ich eine noch bessere Version gefunden:
quelle
LANG
variabel und von Codieren auf die Datei in der Hand abhängig. Ich habe eine Datei, in derLANG=ru_RU.CP1251
zusammen mit-f cp866
gearbeitet wurde.Ich habe das zip-Archiv unter Linux (von der Kommandozeile aus) komprimiert und Dateinamen mit diakritischen Zeichen werden unter Windows nicht korrekt dekomprimiert, aber ich habe es erfolgreich mit der Bandizip- Software entpackt, die den Zeichensatz in der Symbolleiste festlegen kann.
quelle