Zipando Arquivos - Problemas com Acentuação

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