Desafio de codificação de caracteres do Zipfile

1

NOTA: Esta questão é diferente de descompactar ZIP com uma determinada codificação porque nenhuma dessas soluções funciona, e não tenho certeza se um programa de descompactação funcionando corretamente pode até mesmo recuperar o nome de arquivo correto.

Existe um arquivo zip com um nome de arquivo de caractere japonês. unzip pode especificar codificações de caracteres, o que geralmente funciona para recuperar nomes de arquivos corretos. (Não está na página man ou info para descompactar a minha distribuição, mas está na saída de ajuda do executável.)

Mas não funciona para alguns arquivos zip, incluindo este. Esta é uma coleção de arquivos para o programa de animação MikuMikuDance. Vários arquivos têm um nome de arquivo 'lixo' quando usados com unzip -O sjis -l archive.zip ou quando descompactados com o rolo de arquivo.

Outro arquivo no arquivo refere-se aos nomes de arquivos de lixo, embora se refira à codificação shift-JIS do nome e não à UTF8. Ele tenta carregar esses arquivos, então, se eles tiverem o nome errado, eles não poderão ser carregados. A questão aqui é se o arquivo zip é tal que os nomes de arquivos corretos podem ser extraídos por um programa diferente, e se eles foram nomeados corretamente no sistema do remetente.

O nome do arquivo desejado é 'Figure_ そ の 他 .fx' ("outro" em japonês). Parece ter duas representações diferentes no arquivo zip, uma como " " que é SJIS sendo interpretada como UTF8, e em outro lugar como U + 0082 e alguns caracteres tailandeses:

Estasegundaversãoéasaídadounzip,comousemaopção-Osjis.Parecenãohavernenhumamaneiradeconverterissodevoltaparaonomedoarquivooriginal.

Oarquivoziporiginalpodeserbaixado aqui (25 MB ), e seu conteúdo pode ser aberto com o programa gratuito MikuMikuDance, embora o arquivo '.fx' seja usado para o MikuMikuEffect, que requer várias bibliotecas nativas para serem executadas no Wine. Mas talvez alguém possa responder isso sem o arquivo zip.

Os arquivos zip armazenam um nome de arquivo alternativo que normalmente não é usado? Há barras invertidas sendo exibidas como sinais de iene em computadores japoneses relacionados de alguma forma com o nome do arquivo que não está sendo usado? Se você pegar a string que aparece como 'Efeito Normalmap \ Skin \ Figura_ ̑ .fx' e enviá-la para iconv -f sjis -t utf8 , a saída será 'Efeito Normalmap ¥ Skin ¥ Figure_ そ の 他 .fx'. Wikipedia fala sobre um 'campo extra'; isso está sendo usado para armazenar e recuperar o nome do arquivo 'ruim'?

    
por Misaki 04.05.2018 / 01:09

2 respostas

3

Eu acabei de testar isso para mim, usando o link que você forneceu, e baixei um arquivo chamado Obrigado por você Project.zip , que eu tive que descompactar usando senha 864 com 7-zip, e não encontrou problemas em tudo. Eu tenho o arquivo certo?

    
por 04.05.2018 / 01:37
0

As barras invertidas exibidas como sinais de iene não estão relacionadas. O segundo nome do arquivo é o nome do arquivo UTF-8, conforme documentado nas seções 4.5, 4.6 e Apêndice D da especificação do .ZIP .

Neste caso particular, o nome do arquivo foi passado para o programa de empacotamento no Shift-JIS, mas foi assumido como ISO-8859-11 ou TIS-620 (codificações tailandesas) pelo programa de empacotamento. Um dos bytes da entrada foi considerado como sendo, ou convertido em um caractere diferente no Unicode, impedindo a recuperação do nome do arquivo correto.

Quando o campo extra de caminho Unicode do Info-ZIP é usado, programas como 7z ou unzip do Info-ZIP assumem que é válido e ignoram o campo de nome de arquivo básico e a opção -O usada com unzip para definir o codificação de caracteres de origem.

Um patch que adiciona uma opção para anular esse comportamento provavelmente seria bem recebido pelos mantenedores do programa.

    
por 06.05.2018 / 01:32