Bom dia pessoal da comunidade…
Estou com um pequeno problema ao zipar arquivos ou diretórios com acentuação.
Implementei um exempo http://www.devx.com/tips/Tip/14049 que usa recursividade e vai adicionando os arquivos e diretorios em um ZIP.
Ao rodar o programa tanto no linux quanto no Windows o programa gera o Zip normalmente porem para as palavras com acentuação ele os substitui por um caractere qualquer.
Exemplo. se for gerado um zip com os arquivos texto.txt e orçamento.txt, a compressao é feita normalemnte só que o ‘Ç’ do orÇamento.txt é substituido por ‘+?’ ficando or+?mento.txt
Alguem ja passou por esse tipo de problema e sabe de alguma referencia para soluciona-lo ?
Um abraço a todos da comunidade…
Aham, o problema foi notado e é um bug antigo da biblioteca de zips.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244499
ZipEntry() does not convert filenames from Unicode to platform
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4415733
util.zip does not support umlaut (mutated vowel) in file/path-names in zip file
Embora ele fale de “ü” (umlaut é o trema), o problema ocorre com cedilhas e outras coisas, e nunca foi efetivamente resolvido.
É que o Java converte o nome do arquivo para UTF-8 dentro do zip (ou seja, as letras acentuadas acabam ficando com 2 bytes por caracter), quando na verdade ele deveria converter o nome do arquivo para ISO-8859-1, pelo menos quando o locale é ocidental (como em português ou inglês), e nesse caso as letras acentuadas deveriam ficar com 1 byte por caracter.
[quote=thingol]Aham, o problema foi notado e é um bug antigo da biblioteca de zips.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244499
ZipEntry() does not convert filenames from Unicode to platform
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4415733
util.zip does not support umlaut (mutated vowel) in file/path-names in zip file
Embora ele fale de “ü” (umlaut é o trema), o problema ocorre com cedilhas e outras coisas, e nunca foi efetivamente resolvido.
É que o Java converte o nome do arquivo para UTF-8 dentro do zip (ou seja, as letras acentuadas acabam ficando com 2 bytes por caracter), quando na verdade ele deveria converter o nome do arquivo para ISO-8859-1, pelo menos quando o locale é ocidental (como em português ou inglês), e nesse caso as letras acentuadas deveriam ficar com 1 byte por caracter.
[/quote]
Entendi Thiago…
Valew…
vou dar uma olhada no link
Mas teria uma explicação o fato que:
Se eu tenho um arquivo orÇamento.txt no linux… onde todos os caracteres, inclusive o ‘Ç’
ja esta em formato UTF-8 , quando fosse feito um ZIP (pelo java) o arquivo gerado deveria ter como conteudo um arquivo orÇamento.txt tambem… e não or+?mento.txt !!
Lenvando em consideração que ja estamos em um ambiente onde o formato é totalmente UTF-8 o arquivo deveria estar correto.
Bom, se você criar o arquivo com Java e ler o arquivo com Java não dá problemas (experimente usar jar xvf seuarquivo.zip em vez de unzip seuarquivo.zip). É quando você cria o arquivo com Java e lê o arquivo com outra coisa que deve dar problemas; isso porque todos os utilitários de zip que conheço e que foram escritos em C acham que os nomes dos arquivos estão em ISO-8859-1 ou Windows-1252 em vez de estarem em UTF-8 ).
Se realmente você acha que isso é um problema muito sério, pode tentar reimplementar ZipEntry e outras rotinas de java.util.Zip. É possível (até fiz isso, mas não posso postar aqui porque não é open-source), mas dá trabalho.
[quote=thingol]Bom, se você criar o arquivo com Java e ler o arquivo com Java não dá problemas (experimente usar jar xvf seuarquivo.zip em vez de unzip seuarquivo.zip). É quando você cria o arquivo com Java e lê o arquivo com outra coisa que deve dar problemas; isso porque todos os utilitários de zip que conheço e que foram escritos em C acham que os nomes dos arquivos estão em ISO-8859-1 ou Windows-1252 em vez de estarem em UTF-8 ).
[/quote]
Éssa dica foi quente…
não sabia dessa possibilidade… Testei , descomprimindo pelo java e deu certo…
Valew Thiago…
um Abraço