Hier gibt es einige Fragen zu Nicht-ASCII-Buchstaben in den Namen von Dateien, die als Streams in Zip-Dateien gespeichert sind ( Hebräisch , Chinesisch , Japanisch oder Koreanisch ). Keine der angebotenen Lösungen half mir jedoch bei einer Zip-Datei mit kyrillischen Buchstaben, die von einem Windows-Computer stammte.
Die Datei hat selbst einen kyrillischen Namen ( Космос.zip - Link zum Herunterladen). Dies ist ein Archiv mit Inhalten von null Länge, nur zur Veranschaulichung.
unzip -l
Drucke:
Archive: Космос.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-05-03 18:19 ɫ�����/ict_inf.pdf
--------- -------
0 1 file
Das Hässliche ɫ�����
steht für die Folge von Bytes C9 AB DF E8 AB DF BC AB DF
.
Ich weiß (mithilfe der GMail-Vorschaufunktion), dass dies sein sollte
Archive: Космос.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-05-03 18:19 РосКосмос/ict_inf.pdf
--------- -------
0 1 file
Das heißt , wir müssen Karte C9 AB DF E8 AB DF BC AB DF
zu РосКосмос
.
Es gibt mehrere häufig verwendete kyrillische 8-Bit-Codierungen: CP1251, CP866, ISO8859-5, jedoch würde dieses Wort als eine andere Folge von Bytes codiert:
Р о с К о с м о с
CP866: 90 AE E1 8A AE E1 AC AE E1
CP1251: D0 EE F1 CA EE F1 EC EE F1
ISO8859-5: C0 DE E1 BA DE E1 DC DE E1
Offensichtlich würde keine der üblicherweise verwendeten kyrillischen 8-Bit-Codierungen die Eingangsnamen in die Ausgangsnamen wie diese decodieren. Hier ist etwas Komplizierteres am Werk.
Wenn wir nur wüssten, wie man die Namen dekodiert, wäre das Umbenennen der Dateien nach dem Extrahieren mit einem geeigneten find
Skript ( https://unix.stackexchange.com/a/252000/17649 ) einfach , z
find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | here-goes-the-decoding pipeline )"' sh {} \;
oder das Dienstprogramm convmv .
quelle
unzip-iso8859_2.patch
auf OpenSUSE-Pakete entpackte Unzip verursacht wird . Wird wahrscheinlich einen Fehlerbericht einreichen.Ich habe im OpenNET.ru-Forum eine Lösung gefunden, einer beliebten russischsprachigen Ressource, die sich seit 1996 Open-Source-Software und -Technologien widmet. Ein Beitrag auf OpenNET schlägt vor, dass Info-ZIP einst eine beliebte Sammlung von Tools für den Umgang mit ZIP war Archive auf Computern unter MS-DOS gingen davon aus, dass unter MS-DOS nur eine 8-Bit-Codierung vorhanden ist, nämlich CP850. Daher werden alle Dateinamen automatisch durch
CP850->CP1252
Konvertierung ausgeführt. CP1252 wurde wahrscheinlich als beliebteste Annäherung an die ISO-8859-1-Zeichensatzcodierung ausgewählt.Daher wäre der richtige Suchbefehl, der nach dem Extrahieren eines Archivs mit kyrillischen Dateinamen ausgeführt werden soll
Interessanterweise kann man Vorschläge finden, nicht CP1252, sondern ISO-8859-1 zu verwenden. Dies scheint nicht der Fall zu sein, da einige der Archive, bei denen ich auf die Transformation gestoßen bin,
iconv -f iso8859-1 -t cp850
beiiconv -f cp1252 -t cp850
erfolgreicher Konvertierung fehlgeschlagen sind .Zurück zu einzelnen Charakteren
Wenn Sie nun CP850 -> CP1252 anwenden, erhalten Sie
C9 AB DF E8 AB DF BC AB DF
. Genau die Sequenz, die wir beobachtet haben.Ein weiterer nützlicher Befehl wäre
Um eine Liste der Dateien aus dem Archiv zu erhalten
Das Herausfiltern der Zeile, mit der begonnen wird,
Archive:
ist ein Schutz, um den Namen des Archivs vor der Konvertierung zu verbergen.quelle