Como gerar download usando o charset ISO-8859-1

Ola pessoal,

Tenho um programa abaixo que uso para gerar download, mas estou tendo um problema que as pastas ao deszipar e arquivos que contenham caracteres com acento está aparecendo com a codificação toda bagunçada.

Código abaixo do download

No Struts.xml

<action name="download" class="com.mkyong.common.action.DownloadAction">
	<result name="success" type="stream">
	  <param name="contentType">application/octet-stream</param>
	  <param name="inputName">fileInputStream</param>
	  <param name="contentDisposition">attachment;filename="fileABC.txt"</param>
	  <param name="bufferSize">1024</param>
	</result>
   </action>

Existe algum parametro que seto para usar o charset ISO-8859-1

Tentei usar o código abaixo, mas continua dando erro, alguém tem idéia de como resolver isso??

Código que tentei usar, adicionando no Struts.xml, mas não funciona

<param name="charset">ISO-8859-1</param>

Obrigado

Olá.

Amigo, tem certeza que quer usar “application/octet-stream” como content type? Pelo que vi é um arquivo “.txt”. Logo, não seria melhor usar “text/pain”? Veja se isso resolve.

Abraços.

Na verdade o código passado está errado estou usando assim

"contentType", "application/octet-stream",
"inputName", "fileInputStream",
"contentDisposition", "attachment;filename=\"download.zip\"",
"bufferSize", "1024"

Tentei usar com “text/pain”, mas não funcionou tem alguma idéia, como resolver isso?

Obrigado.

Olá. Bem, se o conteudo do arquivo está aparecendo com caracteres estranhos é porque ele já está assim devido a sua própria meta informação. Tens que rever como o arquivo é gerado. Se não puder fazer isso, terá que mudar seu charset antes do download.

Mas, tente isso (eu nunca tentei) no contet type: “xxx; charset=ISO-8859-1”

Não entendi, fazer assim:

"contentType", "charset=ISO-8859-1",
"inputName", "fileInputStream",
"contentDisposition", "attachment;filename=\"download.zip\"",
"bufferSize", "1024"

Assim dá erro?

O meu arquivo que faço upload está com os caracteres com acento certo, está gravando perfeito com acento, mas na hora de gerar o download, gera com os caracteres bagunçado, tanto pasta quanto os arquivos que contenham acentuação. Obs: Tudo que tenha acento, fica bagunçado ao fazer o download.

Tem aguma idéia??

Obrigado.

Acabei de testar da seguinte forma e continua mostrando as pastas e arquivos que contenham acentos com caracteres bagunçados.

"contentType", "application/octet-stream;charset=ISO-8859-1",
"inputName", "fileInputStream",
"contentDisposition", "attachment;filename=\"download.zip\"",
"bufferSize", "1024"

Você tem alguma idéia de como corrigir esse problema???

Amigo, são os NOMES dos arquivos ao descompactar que estão com caracteres estranhos ou o CONTEÚDO deles?

Acho que não fui bem preciso. Foi mal.

São os nomes dos arquivos que estão com os caracteres estranhos.

Você poderia explicar como gera esse arquivo ZIP?

Ele é criado pela sua aplicação ou já fazem o upload dele e depois é simplesmente feito o download? Porque se for assim, tem que ver com essa galera especialista em mapa de caracteres em SOs. Nesse caso não seria problema do framework Web, visto que ele não altera sequer 1 bit do arquivo, entende?

Eu faço assim:

  1. Os usuários fazem o upload do arquivo para o sistema. (Já verifiquei se nessa hora do upload do arquivo guardado, ele está vindo com caracteres estranhos e aparentemente o arquivo guardado no sistema, mesmo contendo acento nos nomes está sendo guardado certo).

  2. Depois eu faço o download do arquivo que está guardado no sistema. (Já notei antes de fazer o download do arquivo se ele está com caracteres estranhos no nome e está certo o nome).

  3. Após o download ao deszipar o arquivo, ele fica os nomes com caracteres estranhos.

Eu faço assim o download do arquivo:

@Action(value = "/download", results = {
        @Result(location = "telaPrincipal", name = ERRO, type = "tiles"),
        @Result(location = "ok", name = SUCESSO, type = "stream",
        params = {
            "contentType", "application/octet-stream",
            "inputName", "fileInputStream",
            "contentDisposition", "attachment;filename=\"download.zip\"",
            "bufferSize", "1024"
        })
    })
    public String download(){

        try{
            //Pega o caminho da aplicação
            ServletContext context = ServletActionContext.getServletContext();
            String caminho=context.getRealPath("");

            //Pega o caminho que está o projeto, e faz o download de tudo
            caminho = caminho + java.io.File.separator+"arquivo"+java.io.File.separator + "pasta1";

            //Esse método fará o zip da pasta do projeto para a extensão (.zip)
            Util.ziparArquivo(caminho, caminho+".zip");

            fileInputStream = new FileInputStream(new File(caminho + ".zip"));
        }catch (Exception e){
            e.printStackTrace();
            return ERRO;
        }

        return SUCESSO;
    }

Antes de fazer o download eu zipo ele da seguinte forma

    //Método responsável para mandar zipar a pasta
    public static void ziparArquivo(String caminhoPasta, String destinoZip) throws Exception {
        ZipOutputStream zip = null;
        FileOutputStream fileWriter = null;

        fileWriter = new FileOutputStream(destinoZip);
        zip = new ZipOutputStream(fileWriter);

        //Adiciona a pasta no zip
        adicionarCaminhoZipar("", caminhoPasta, zip);

        zip.flush();
        zip.close();
    }

Tem alguma idéia.

Obrigado

Isso pra mim tá com cara de “windows x linux” no “cliente x servidor” se é que me entendeu ^^’

Se puder, manda fazer o download do arquivo original, sem zipá-lo. Se assim o arquivo vier normal então o problema tá na rotina de “compactação”.