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
efind
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.