Herausforderung für die Codierung von Zip-Dateien

801
Misaki

HINWEIS: Diese Frage unterscheidet sich von dekomprimieren von ZIP mit der angegebenen Kodierung, da keine dieser Lösungen funktioniert und ich bin nicht sicher, ob ein ordnungsgemäß funktionierendes Entpackungsprogramm sogar den korrekten Dateinamen abrufen kann.

Es gibt eine ZIP-Datei mit einem japanischen Dateinamen. unzipkann Zeichencodierungen angeben, mit denen normalerweise korrekte Dateinamen abgerufen werden. (Es ist nicht in der manoder info-Zeile für Unzip für meine Distribution enthalten, aber es ist in der Hilfeausgabe der ausführbaren Datei enthalten.)

Es funktioniert jedoch nicht für einige ZIP-Dateien, einschließlich dieser. Dies ist eine Sammlung von Dateien für das Animationsprogramm MikuMikuDance. Mehrere Dateien haben einen "Müll" -Dateinamen, wenn sie unzip -O sjis -l archive.zipmit File-Roller verwendet oder dekomprimiert werden.

Eine andere Datei im Archiv bezieht sich auf die Garbage-Dateinamen, obwohl sie sich auf die Shift-JIS-Codierung des Namens und nicht auf UTF8 bezieht. Es wird versucht, diese Dateien zu laden. Wenn sie falsch benannt werden, können sie nicht geladen werden. Hier stellt sich die Frage, ob die ZIP-Datei so ist, dass die korrekten Dateinamen von einem anderen Programm extrahiert werden könnten und ob sie auf dem System des Uploaders richtig benannt wurden.

Der gewünschte Dateiname lautet 'Figure_ そ の f .fx' (auf Japanisch "other"). Es scheint zwei verschiedene Darstellungen in der zip-Datei zu haben, eine als " ", wobei SJIS als UTF8 interpretiert wird, an anderer Stelle als U + 0082 und einige thailändische Zeichen:

grep binary file Diese zweite Version ist die Ausgabe von entpacken mit oder ohne -O sjisOption. Es scheint keine Möglichkeit zu geben, diese auf den ursprünglichen Dateinamen zurück zu konvertieren.

Die ursprüngliche ZIP-Datei kann hier heruntergeladen werden (25 MB) und der Inhalt kann mit dem kostenlosen Programm MikuMikuDance geöffnet werden, obwohl die '.fx' -Datei für MikuMikuEffect verwendet wird, für das mehrere native Bibliotheken in Wine erforderlich sind. Aber vielleicht kann jemand dies ohne die zip-Datei beantworten.

Speichern ZIP-Dateien einen alternativen Dateinamen, der normalerweise nicht verwendet wird? Werden auf japanischen Computern umgekehrte Schrägstriche als Yen-Zeichen angezeigt, die sich auf den nicht verwendeten Dateinamen beziehen? Wenn Sie die Zeichenfolge nehmen, die als "Normalmap-Effekt \ Skin \ Figure_x.fx" angezeigt wird, und als Pipe dorthin weiterleiten, iconv -f sjis -t utf8lautet die Ausgabe "Normalmap-Effekt ¥ Skin ¥ _ の f .fx". Wikipedia spricht von einem "zusätzlichen Feld"; Wird dies zum Speichern und Abrufen des 'falschen' Dateinamens verwendet?

1
Es gibt keine formale Spezifikation für den Zeichensatz, der zum Kodieren von Einträgen in einer ZIP-Datei verwendet wird. Ignacio Vazquez-Abrams vor 5 Jahren 0
Mögliches Duplikat von [ZIP dekomprimieren mit angegebener Kodierung] (https://superuser.com/questions/872596/decompress-zip-with-given-encoding) JakeGould vor 5 Jahren 0
Die Lösung, wie in [dem Dup-Post, mit dem ich diese Verbindung hergestellt hatte] (https://superuser.com/questions/872596/decompress-zip-with-given-encoding) vorgeschlagen, besteht darin, 7-Zip oder Unrar anstelle von plain zu verwenden alte Zip. JakeGould vor 5 Jahren 0
Es ist definitiv kein Duplikat dieses Beitrags. Die erste Antwort auf diese Frage erwähne ich im ersten Absatz. Eine andere Antwort erwähnte die Kodierungsauswahl von 7z; `für i in ; do 7z l -scs $ i 'archive.zip' | grep そ の 他; echo $ i; done` gibt für i <3000 nichts zurück, obwohl es eine Reihe von Identifikatoren über 3000 gibt. Misaki vor 5 Jahren 0
Ich bekomme das gleiche negative Ergebnis für eine andere ZIP-Datei, deren Dateinamen jedoch von `unzip -O sjis -l archive.zip` erkannt werden. Ich mache es also falsch oder es ist kaputt. (Und grep; echo $ wurde in && geändert.) Misaki vor 5 Jahren 0
Zip-Dateien _do_ haben manchmal ein separates Feld für "Unicode-Dateiname" (InfoZip-Format). grawity vor 5 Jahren 0
Das Komprimierungsprogramm interpretierte SJIS also als iso8859-11 oder etwas sehr ähnliches. Eines der Bytes wurde dabei irgendwie geändert. Dieses falsche Ergebnis wurde als "Unicode-Dateiname" gespeichert, und Dekomprimierungsprogramme verwenden das falsche Ergebnis. Der korrekte "falsche" Dateiname als iso8859-11 wäre "ผ ", aber in der zip-Datei steht" Figure_ฬ 'ผ. Fx ". Misaki vor 5 Jahren 0
Vom Thema abkommen, aber wie ist SJIS> iso8859-11 (oder vielleicht TIS-620) passiert? Ist das Verpackungsprogramm davon ausgegangen, dass die Eingabe in der Systemcodierung erfolgte, die Thai war? Diese Annahme war falsch, da die thailändische Kodierung keine japanischen Zeichen enthält. Wurde der japanische Dateiname als SJIS auf der Festplatte gespeichert oder hat das Betriebssystem einen UTF8-Dateinamen von der Festplatte gelesen, in den Speicher für den Zugriff durch Programme in SJIS konvertiert und die SJIS-Bytefolge an das Verpackungsprogramm übergeben? Das Programm, das die Datei verwendet, lädt sie nur dann automatisch in Linux / Wine, wenn die LANG-Variable auf ja_JP.UTF8 gesetzt ist. ähnlich für Windows? Misaki vor 5 Jahren 0

2 Antworten auf die Frage

3
Y Treehugger Cymru

Ich habe das gerade mit dem von Ihnen bereitgestellten Link für mich getestet und eine Datei mit dem Titel Thank You For You Project.zip heruntergeladen, die ich mit dem Passcode 864 mit 7-zip entpacken musste und überhaupt keine Probleme hatte. Hatte ich die richtige Datei?

Kommentare sind nicht für eine erweiterte Diskussion vorgesehen. Diese Konversation wurde in den Chat verschoben (https://chat.stackexchange.com/rooms/77060/discussion-on-answer-by-y-treehugger-cymru-zipfile-character-encoding-challenge). DavidPostill vor 5 Jahren 0
0
Misaki

Backslashes, die als Yen-Zeichen angezeigt werden, stehen in keinem Zusammenhang. Der zweite Dateiname ist der UTF-8-Dateiname, wie in den Abschnitten 4.5, 4.6 und Anhang D der .ZIP-Spezifikation dokumentiert .

In diesem speziellen Fall wurde der Dateiname an das Verpackungsprogramm in Shift-JIS übergeben, wurde jedoch vom Verpackungsprogramm als ISO-8859-11 oder TIS-620 (Thai-Kodierungen) angenommen. Es wurde angenommen, dass eines der Bytes der Eingabe in Unicode ein anderes Zeichen ist oder in ein anderes Zeichen umgewandelt wurde, um die Wiederherstellung des korrekten Dateinamens zu verhindern.

Wenn das Info-ZIP-Unicode-Pfad-Zusatzfeld verwendet wird, gehen Programme wie 7z oder Info-ZIP unzipdavon aus, dass sie gültig ist, und ignorieren das grundlegende Dateinamenfeld und die -OOption, mit unzipder die Quellzeichencodierung festgelegt wird.

Ein Patch, der eine Option zum Überschreiben dieses Verhaltens hinzufügt, wird wahrscheinlich von den Betreuern des Programms begrüßt.