Como posso descompactar corretamente um arquivo ZIP de arquivos com nomes hebraicos?

9

Alguém me enviou um arquivo ZIP contendo arquivos com nomes em hebraico (e criados no Windows, não tenho certeza com qual ferramenta). Eu uso o LXDE no Debian Stretch. O gerenciador de arquivos do Gnome consegue descompactar o arquivo, mas os caracteres hebraicos são distorcidos. Eu acho que estou recebendo octetos UTF-8 estendidos em caracteres Unicode, por exemplo Eu tenho um arquivo cujo nome tem quatro caracteres e um .doc suffic e os caracteres são: 0x008E 0x0087 0x008E 0x0085. Usar o utilitário unzip da linha de comando é ainda pior - ele se recusa a descompactar completamente, reclamando de um caractere "multibyte ou wide inválido ou incompleto".

Então, minhas perguntas são:

  • Existe outro utilitário de descompactação que descompactará meus arquivos com os nomes corretos?
  • Há algo errado com a maneira como o arquivo foi compactado ou é apenas uma incompatibilidade de implementações ZIP? Ou até mesmo erro de configuração / bug dos utilitários ZIP do Linux?
  • O que posso fazer para obter os nomes de arquivo corretos depois de ter descomprimido usando os truncados?
por einpoklum 28.12.2015 / 18:47

4 respostas

10

Parece que os nomes dos arquivos estão codificados em uma das páginas de códigos proprietárias do Windows ( CP862 , 1255 , etc).

  • Existe outro utilitário de descompactação que descompactará meus arquivos com os nomes corretos? Não estou ciente de um utilitário zip que suporte essas páginas de código nativamente. 7z tem algum entendimento de codificações, mas acredito que tem que ser uma codificação que seu sistema saiba mais geralmente (você escolhe definindo a variável de ambiente LANG ) e as páginas de códigos do Windows provavelmente não estão entre elas.

    unzip -UU deve funcionar a partir da linha de comando para criar arquivos com os bytes corretos em seus nomes (desabilitando todo o suporte a Unicode). Esse é provavelmente o efeito que você obteve da ferramenta do GNOME já. A codificação não será correta, mas podemos corrigir isso abaixo.

  • Há algo errado com a maneira como o arquivo foi compactado ou é apenas uma incompatibilidade de implementações ZIP? Ou até mesmo falha / erro dos utilitários ZIP do Linux? O arquivo que você recebeu não foi criado de forma portável. Isso não é necessariamente errado para um uso interno em que a codificação é fixa e conhecida antecipadamente, embora a especificação do formato diga que os nomes devem ser UTF-8 ou cp437 e os seus não são nenhum deles. Mesmo entre máquinas Windows, o uso de diferentes páginas de código não funciona bem, mas as máquinas não-Windows não têm nenhum conceito dessas páginas de código para começar. A maioria das ferramentas UTF-8 codifica seus nomes de arquivos (o que nem sempre é suficiente para evitar problemas).

  • O que posso fazer para obter os nomes de arquivo corretos depois de ter descomprimido usando os truncados? Se você puder identificar a codificação dos nomes de arquivos, você pode converter os bytes nos nomes existentes em UTF-8 e mova os arquivos existentes para o nome correto. A ferramenta convmv essencialmente encerra o processo em um único comando: convmv -f cp862 -t utf8 -r . tentará converter tudo em . de cp862 para UTF-8.

    Como alternativa, você pode usar iconv e find para mover tudo para os nomes corretos. Algo como:

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

    encontrará todos os arquivos abaixo do diretório atual e tentará converter os nomes em UTF-8.

    Em ambos os casos, você pode experimentar diferentes codificações e tentar encontrar uma que faça sentido.

Depois de corrigir a codificação para você, se você quiser enviar esses arquivos de volta na outra direção, é possível que você tenha o mesmo problema do outro lado. Nesse caso, você pode reverter o processo antes de compactar os arquivos com -UU , pois provavelmente será muito difícil corrigi-lo no final do Windows.

    
por 28.12.2015 / 21:52
3

Acabei de ter o mesmo problema, e minha versão do unzip que está disponível nos repositórios do Ubuntu ( UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP. ) pode lidar com a decodificação automática de nomes de arquivos se você especificar a opção -a .

unzip -xa stupid.zip
    
por 04.03.2018 / 16:27
2

Eu tive sucesso com o comando 7z x <source.zip> .

Versão:

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

Ambiente potencialmente relevante:

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

Ele foi capaz de descompactar todos os arquivos com caracteres de 8 bits em seus nomes de arquivos, com alguns desses caracteres ignorados, alguns confusos.

    
por 11.03.2018 / 14:03
0

Eu tenho um arquivo zip compactado no Linux (da linha de comando) e nomes de arquivos com caracteres diacríticos não são corretamente descompactados no Windows, mas eu o descompactei com êxito com Bandizip software que pode definir charset na barra de ferramentas.

    
por 14.02.2018 / 01:41