Decodificação correta de nomes de arquivos de entrada zip - CP437, UTF-8 ou?
Recentemente, escrevi uma biblioteca de E / S de arquivos zip chamadazipzap, mas eu estou lutando com decodificação correta nomes de arquivos de entrada zip de arquivos zip arbitrários.
Agora oEspecificação PKWARE estados:
D.1 O formato ZIP historicamente suportava apenas o conjunto original de codificação de caracteres IBM PC, comumente chamado de IBM Code Page 437 ...
D.2 Se o bit 11 de uso geral não estiver definido, o nome do arquivo e o comentário devem estar de acordo com a codificação original de caracteres ZIP. Se o bit 11 de uso geral estiver definido, o nome do arquivo e o comentário deverão suportar O Padrão Unicode, Versão 4.1.0 ou superior, usando o formulário de codificação de caracteres definido pela especificação de armazenamento UTF-8 ...
o que significa que os arquivos zip em conformidade codificam os nomes dos arquivos como CP437, a menos que o bit EFS esteja definido, caso em que os nomes dos arquivos são UTF-8.
Infelizmente, parece que muitas ferramentas zip não definem o bit EFS corretamente (por exemplo, Mac CLI, GUI zip) ou usam alguma outra codificação, normalmente o sistema padrão (por exemplo, WinZip?). Se você sabe como o WinZip, o 7-Zip, o Info-Zip, o PKZIP, o Java JAR / Zip, o zip .NET, o dotnetzip, etc. codificam os nomes dos arquivos e definem o campo "versão feita por".fechando, por favor, diga.
Em particular, a Info-Zip tenta isso quandodescompactando:
Sistema de arquivos = MS-DOS (0) => CP437exceto: versão = 2.5, 2.6, 4.0 => ISO 8859-1Sistema de arquivos = HPFS (6) => CP437Sistema de arquivos = NTFS (10) e versão = 5.0 => CP437caso contrário, a ISO 8859-1Se eu quiser apoiar a inspeção ou extração de arquivos zip arbitrários e fazer umarazoável tentativa na codificação do nome do arquivo sem o sinalizador EFS, o que posso procurar?