Come posso decomprimere correttamente un archivio ZIP di file con nomi ebraici?


18

Qualcuno mi ha inviato un file ZIP contenente file con nomi ebraici (e creato su Windows, non sono sicuro con quale strumento). Uso LXDE su Debian Stretch. Il gestore dell'archivio Gnome riesce a decomprimere il file, ma i caratteri ebraici sono confusi. Io penso che sto diventando UTF-8 ottetti estesi in caratteri Unicode, ad esempio, ho un file il cui nome ha quattro personaggi e un suffic .doc, ei personaggi sono: 0x008E 0x0087 0x008E 0x0085. L'uso dell'utilità di decompressione della riga di comando è ancora peggio: si rifiuta di decomprimersi del tutto, lamentandosi di un "multibyte non valido o incompleto o carattere largo".

Quindi, le mie domande sono:

  • Esiste un'altra utility di decompressione che decomprimerà i miei file con i nomi corretti?
  • C'è qualcosa di sbagliato nel modo in cui il file è stato compresso o è solo un'incompatibilità delle implementazioni ZIP? O addirittura malfunzionamenti / bug delle utility ZIP Linux?
  • Cosa posso fare per ottenere i nomi di file corretti dopo aver decompresso usando quelli confusi?

Se cerchi quei byte nella tabella cp862 il nome del file corrisponde a quello che ti aspetti? Altrimenti, conosci la codifica nativa della macchina sorgente?
Michael Homer,

Idem per cp1255 e qualsiasi altra codifica plausibile; potrebbe essere possibile risolverlo in base a ciò che sembra giusto.
Michael Homer,

@MichaelHomer: No, non sembra corrispondere. La codifica nativa della macchina di origine è qualunque cosa MS Windows usi quando si impostano le impostazioni regionali su Ebraico-Israele, quindi immagino che a volte sia UTF-8 e talvolta CP1255.
einpoklum,

Risposte:


15

Sembra che i nomi dei file siano codificati in una delle tabelle di codici proprietarie di Windows ( CP862 , 1255 , ecc.).

  • Esiste un'altra utility di decompressione che decomprimerà i miei file con i nomi corretti? Non sono a conoscenza di un'utilità zip che supporti nativamente queste pagine di codice. 7z ha una certa comprensione delle codifiche, ma credo che debba essere una codifica che il tuo sistema conosce più in generale (scegli tu impostando la LANGvariabile di ambiente) e probabilmente i codici di Windows non sono tra quelli.

    unzip -UUdovrebbe funzionare dalla riga di comando per creare file con i byte corretti nei loro nomi (disabilitando tutto il supporto Unicode). Questo è probabilmente l'effetto che hai già ottenuto dallo strumento GNOME. La codifica non sarà corretta in entrambi i modi, ma possiamo risolverlo di seguito.

  • C'è qualcosa di sbagliato nel modo in cui il file è stato compresso o è solo un'incompatibilità delle implementazioni ZIP? O addirittura malfunzionamenti / bug delle utility ZIP Linux? Il file che ti è stato dato non è stato creato in modo portabile. Ciò non è necessariamente errato per un uso interno in cui la codifica è fissa e nota in anticipo, sebbene le specifiche del formato affermino che i nomi dovrebbero essere UTF-8 o cp437 e i tuoi non lo sono. Anche tra i computer Windows, l'utilizzo di tabelle codici diverse non funziona bene, ma i computer non Windows non hanno il concetto di quelle pagine di codice per cominciare. La maggior parte degli strumenti UTF-8 codifica i loro nomi di file (che comunque non è sempre sufficiente per evitare problemi).

  • Cosa posso fare per ottenere i nomi di file corretti dopo aver decompresso usando quelli confusi? Se riesci a identificare la codifica dei nomi dei file, puoi convertire i byte nei nomi esistenti in UTF-8 e spostare i file esistenti con il nome giusto. Lo convmvstrumento sostanzialmente racchiude quel processo in un singolo comando: convmv -f cp862 -t utf8 -r .proverà a convertire tutto all'interno .da cp862 a UTF-8.

    In alternativa, puoi usare iconve findspostare tutto sui loro nomi corretti. Qualcosa di simile a:

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

    troverà tutti i file sotto la directory corrente e proverà a convertire i nomi in UTF-8.

    In entrambi i casi, puoi sperimentare codifiche diverse e provare a trovarne una che abbia senso.


Dopo aver corretto la codifica per te, se vuoi rimandare questi file nell'altra direzione è possibile che tu abbia lo stesso problema dall'altra parte. In tal caso, è possibile invertire il processo prima di comprimere i file -UU, poiché è probabile che sia molto difficile da risolvere da Windows.


Immagino che ciò dovrà avvenire dal momento che il file ZIP che stavo esaminando ora è andato per, beh, per ragioni irrilevanti qui. Grazie, lo farò la prossima volta e spero per il meglio.
einpoklum,

1
raro p7ziprifiutare di gestire archivi .zip. C'è un modo per estrarre un archivio con nomi di file in codifiche proprietarie, su Linux? Quando estraggo con unzip, viene visualizzato un errore: "errore: impossibile creare ╨и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨ ▓╨Ю╨┤╨╜╨╛╨╣ ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Nome file troppo lungo "
Nickolai Leschov

Sono riuscito a estrarre correttamente il file .zip con LANG=ru_RU.CP1251; unzip Bleed.zip(era la codifica cirillica nel mio caso). Ora mi chiedo come posso impostare il mio sistema in modo da poter aprire correttamente tali file .zip nella GUI per impostazione predefinita?
Nickolai Leschov

@NickolaiLeschov Fai una domanda e qualcuno potrebbe essere in grado di aiutarti. Probabilmente dovrai fornire ulteriori informazioni sul tuo sistema.
Michael Homer

unzip -UU foo.zipha lavorato per personaggi turchi
Mert S. Kaplan,

8

Ho avuto successo con il comando 7z x <source.zip>.

Versione:

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

Ambiente potenzialmente rilevante:

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

È stato in grado di decomprimere tutti i file con caratteri a 8 bit nei nomi dei file, con alcuni di questi caratteri saltati, altri confusi.


p7zip è l'unico che ha funzionato per me
alex88

6

Ho appena avuto lo stesso problema e si scopre che la mia versione unzipè disponibile dai repository Ubuntu ( UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.) in grado di gestire la decodifica automatica dei nomi di file se si specifica l'opzione -a.

unzip -a stupid.zip

+1 anche se non ho nulla con cui provare questo adesso.
einpoklum,

1
Secondo la pagina man del unzipl' -ainterruttore si occupa di convertire i file di testo. Non nomi di file.
beruic

@beruic, avevo decompresso i numeri unicode come nomi di file (# U + 0040 # U + 0050 ...), e poi "decomprimere -a" mi ha davvero aiutato.
Chang Zhao,

1
Ho provato questo su alcuni manga. I nomi dei file sono stati decodificati correttamente, ma le immagini sono state anche interpretate come testo (!) E corrotte completamente. Interpreta persino i file zip e rar all'interno dell'archivio come testo, il rilevamento è completamente inutile.
rjh

2

Ho avuto un problema simile con la decodifica di un archivio zip con caratteri cirillici. Uno script Python a una riga ha svolto correttamente il lavoro:

#!/usr/bin/python

import zipfile
import sys

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

Quindi chiamalo e basta unzip_enc e chiamalounzip_enc ZIP_FILE [TARGET_DIR]

Per me né il unzip -UU, unzip -aLANG*le variabili di ambiente hanno fatto nulla di buono.


Ci proverò la prossima volta che avrò un tale file zip da estrarre ... grazie. Ma - potresti cambiare il tuo script in modo da: 1. controllare se ci sono due argomenti 2. estrarre nella directory di lavoro corrente se viene fornito solo il file zip?
einpoklum,

2

Ho avuto fortuna con questa combinazione:

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

aggiungi --notest a convmv per la rinomina effettiva. Più tardi ho trovato la versione ancora migliore:

LANG=es_MX.cp437 unzip -UU file.zip
convmv -f cp437 -t utf8 -r . --notest

+1 solo per convmv e lo strumento 7zip da riga di comando.
einpoklum,

Probabilmente si devono provare diverse opzioni per la LANGvariabile e dalla codifica a seconda del file in questione. Ho un file dove LANG=ru_RU.CP1251insieme ha -f cp866funzionato.
Dmitri Chubarov,

0

Ho un archivio zip compresso in Linux (dalla riga di comando) e i nomi dei file con caratteri diacritici non sono decompressi correttamente su Windows, ma l'ho decompresso con successo con il software Bandizip che può impostare il set di caratteri sulla barra degli strumenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.