Alguém me enviou um arquivo ZIP contendo arquivos com nomes hebraicos (e criados no Windows, sem saber com qual ferramenta). Eu uso o LXDE no Debian Stretch. O gerenciador de arquivamentos do Gnome consegue descompactar o arquivo, mas os caracteres hebraicos são ilegíveis. Eu acho que estou obtendo octetos UTF-8 estendidos em caracteres Unicode, por exemplo, eu tenho um arquivo cujo nome tem quatro caracteres e uma suficiência .doc, e os caracteres são: 0x008E 0x0087 0x008E 0x0085. O uso do utilitário de descompactação da linha de comando é ainda pior - ele se recusa a descompactar completamente, reclamando de um "caractere amplo ou multibyte 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 de errado com a forma como o arquivo foi compactado ou é apenas uma incompatibilidade de implementações ZIP? Ou até falha / bug dos utilitários ZIP do Linux?
- O que posso fazer para obter os nomes de arquivos corretos depois de ter descompactado usando os ilegíveis?
character-encoding
zip
unicode
file-format
einpoklum
fonte
fonte
Respostas:
Parece que os nomes de arquivos estão codificados em uma das páginas de código proprietárias do Windows ( CP862 , 1255 , etc.).
Existe outro utilitário de descompactação que descompactará meus arquivos com os nomes corretos? Não conheço um utilitário zip que ofereça suporte a essas páginas de código nativamente. O 7z tem algum entendimento sobre codificações, mas acredito que deve ser uma codificação que seu sistema conheça de maneira mais geral (você escolhe definindo a
LANG
variável de ambiente) e as páginas de código do Windows provavelmente não estão entre elas.unzip -UU
deve funcionar na linha de comando para criar arquivos com os bytes corretos em seus nomes (desativando todo o suporte a Unicode). Esse é provavelmente o efeito que você já obteve da ferramenta do GNOME. A codificação não será correta de qualquer maneira, mas podemos corrigir isso abaixo.Há algo de errado com a forma como o arquivo foi compactado ou é apenas uma incompatibilidade de implementações ZIP? Ou até falha / bug dos utilitários ZIP do Linux? O arquivo que você recebeu não foi criado portably. Isso não é necessariamente errado para um uso interno em que a codificação é corrigida e conhecida com antecedência, embora a especificação de formato diga que os nomes devam ser UTF-8 ou cp437 e o seu também. Mesmo entre máquinas Windows, o uso de diferentes páginas de código não funciona bem, mas as máquinas que não são Windows não têm 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 arquivos corretos depois de ter descompactado usando os ilegíveis? Se você conseguir identificar a codificação dos nomes de arquivos, poderá converter os bytes nos nomes existentes em UTF-8 e mover os arquivos existentes para o nome correto. A
convmv
ferramenta basicamente agrupa esse processo em um único comando:convmv -f cp862 -t utf8 -r .
tentará converter tudo dentro.
do cp862 para UTF-8.Como alternativa, você pode usar
iconv
efind
mover tudo para os nomes corretos. Algo como: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, 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
-UU
, pois provavelmente será muito difícil de corrigir no final do Windows.fonte
rar
ou sep7zip
recusar a manipular arquivos .zip. Existe uma maneira de extrair um arquivo com nomes de arquivos em codificações proprietárias, no Linux? Quando extraio comunzip
, recebo um erro: "erro: não é possível criar ╨╕╨┐и╨╕╨┐ / Ship_╨п ╨Я╤А╨╛╤З╨╗╨░ ╨Я╤А╨╛ ╨н╤В╨╛ ╨ File ╨Ъ╨╜╨╕╨╢╨║╨╡! .Png Nome do arquivo muito longo "LANG=ru_RU.CP1251; unzip Bleed.zip
(era codificação cirílica no meu caso). Agora, pergunto-me como configuro meu sistema para que eu possa abrir corretamente esses arquivos .zip na GUI por padrão?unzip -UU foo.zip
trabalhou para caracteres turcosEu tive sucesso com o comando
7z x <source.zip>
.Versão:
Ambiente potencialmente relevante:
Ele foi capaz de descompactar todos os arquivos com caracteres de 8 bits em seus nomes de arquivos, com alguns desses caracteres ignorados, outros ilegíveis.
fonte
Acabei de ter o mesmo problema, e acontece que minha versão
unzip
disponível nos repositórios Ubuntu (UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
) pode lidar com decodificação automática de nomes de arquivos se você especificar a-a
opção.fonte
unzip
o-a
switch cuida da conversão de arquivos de texto. Não nomes de arquivos.Eu tive um problema semelhante ao decodificar um arquivo zip com caracteres cirílicos. Um script python de uma linha fez o trabalho corretamente:
Então é só ligar
unzip_enc
e ligarunzip_enc ZIP_FILE [TARGET_DIR]
Para mim
unzip -UU
,unzip -a
nemLANG*
as variáveis de ambiente nem fizeram algum bem.fonte
Eu tive sorte com esta combinação:
add --notest para convmv para renomear real. Mais tarde eu achei uma versão ainda melhor:
fonte
LANG
variável e de codificação, dependendo do arquivo em questão. Eu tenho um arquivo onde,LANG=ru_RU.CP1251
juntamente com-f cp866
trabalhou.Eu tenho um arquivo compactado no Linux (a partir da linha de comando) e os nomes de arquivos com caracteres diacríticos não são descompactados corretamente no Windows, mas eu o descompactei com êxito com o software Bandizip , que pode definir o conjunto de caracteres na barra de ferramentas.
fonte