1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro na geração de arquivo TAR

Estou gerando programaticamente um arquivo do tipo .TAR onde adiciono um diretório no mesmo. Acontece que, alguns arquivos e/ou pastas possuem caracteres "especiais" como ç, ã, é, etc e, ao serem empacotados no TAR mudam de caracteres indicando problemas de Charset que não estou conseguindo achar uma resposta.

Estava usando, inicialmente, o jTar e, ao me deparar com esse problema, troquei para o CommonsCompress da Apache. Entretanto, ambos possuem a mesma peculiaridade...

Abaixo trecho de código que estou utilizando (Com o CommonsCompress)

            //Obter caminho relativo
            int offset = parentPath.length() + 1;
            int length = absolutePath.getBytes().length - offset;

            //Criei estes para testar qual funciona
            Charset utf8 = Charset.forName("UTF-8");
            Charset iso8859_1 = Charset.forName("ISO-8859-1");
            Charset defaultCharset = Charset.defaultCharset();

            //Em teoria, o charSet utilizado é o default.
            byte[] bytesFileName = absolutePath.getBytes(defaultCharset);

            String fileName = TarUtils.parseName(bytesFileName, offset, length);

            fileName = new String(fileName.getBytes(iso8859_1)); //Tentando adequar o charset sem sucesso..

            ArchiveEntry sEntry = tarOut.createArchiveEntry(file, fileName);

            System.out.println("will add " + fileName + " as " + sEntry.getName());

            tarOut.putArchiveEntry(sEntry);

Obs.: O TarUtils que estou utilizando não é o causador do problema. Tentei primeiro sem ele mas sem sucesso.

  • O SO, por enquanto, é o Windows mas será testado posteriormente em Linux mas, em teste preliminar, o problema foi o mesmo independente de SO...

    wellington.nogueira   14 de mai de 2013
  • A sim, o TAR é gerado. Mas ao desempacotar, os nomes dos arquivos foram "corrompidos".

    wellington.nogueira   14 de mai de 2013
  • Não encontrei solução para esse problema (me parece falha do algoritmo dos frameworks).

    wellington.nogueira   06 de jun de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.