Convertendo arquivo ANSI para UFT-8

274 views
Skip to first unread message

Tayson Rodrigues

unread,
Jan 16, 2014, 3:10:36 PM1/16/14
to wicke...@googlegroups.com
Boa tarde, meu problema e o seguinte:
Preciso ler um arquivo .TXT que virá no formato ANSI e converte-lo para UTF-8. Ja tentei o dessa maneira...

BufferedReader in = new BufferedReader( new InputStreamReader(new FileInputStream("infilename"), "ISO-8859-1"));

Porem esse arquivo .txt vem de um update, ou seja não esta salvo na maquina. Teria alguma forma de fazer essa conversão com esse arquivo "em memoria" ??

tetsuo

unread,
Jan 16, 2014, 5:40:41 PM1/16/14
to wicke...@googlegroups.com
update => upload?


2014/1/16 Tayson Rodrigues <tayso...@gmail.com>

--
# Mensagem do grupo "Wicket em Português" do Google Groups.
* Para postar, envie e-mail para: wicke...@googlegroups.com
* Para cancelar inscrição, envie e-mail para wicket-ptbr...@googlegroups.com
* Mais opções, visite http://groups.google.com.br/group/wicket-ptbr?hl=pt-BR
---
You received this message because you are subscribed to the Google Groups "Wicket em Português" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wicket-ptbr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

David Padilha Coelho De Lucca

unread,
Jan 17, 2014, 4:14:35 AM1/17/14
to wicke...@googlegroups.com, wicke...@googlegroups.com
Bom dia! O arquivo quando chega no upload é um Inputstream. Vc pode ler ler o conteúdo, armazenar em uma String e fazer a conversao:

String unicode = new String(bytesDaStringLida, "IBM850");
unicode.getBytes("UTF-8"); // aqui vc pega a str como quiser.
Vale lembrar que vc precisa saber qual é o code page utilizado no ANSI e vc substitui ele pelo IBM850.


David Padilha
--

Tayson Rodrigues

unread,
Jan 17, 2014, 7:12:52 AM1/17/14
to wicke...@googlegroups.com
David fiz o que sugeriu, mais o arquivo ainda continua no formato ANSI,

String arquivo = new String(campoUpload.getArquivo().getBytes(), "ISO-8859-1");
            arquivo.getBytes("UTF-8");

Eis meu codigo.

            String arquivo = new String(campoUpload.getArquivo().getBytes(), "ISO-8859-1");
            arquivo.getBytes("UTF-8");
           
//            BufferedReader in = new BufferedReader (new InputStreamReader(new FileInputStream(arquivo), "ISO-8859-1"));
            final BufferedReader leitor = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(campoUpload.getArquivo().getBytes())));
               
            String line;  
            while((line = leitor.readLine()) != null) {  
               buffer.append(line + "\n");  
            }  
         
            leitor.close();  
         
        BufferedWriter out = new BufferedWriter (new OutputStreamWriter(new FileOutputStream(arquivo), "UTF-8")); 
        out.write(buffer.toString());  
        out.close();

Tentei continuar usando o BufferedWriter, mais no OutputStreamWriter ele ainda precisa do caminho do arquivo e não do próprio arquivo em uma string.
Alguma observação ?? Grato

tetsuo

unread,
Jan 17, 2014, 8:23:25 AM1/17/14
to wicke...@googlegroups.com
A variável 'arquivo' se refere ao caminho ou ao conteúdo do arquivo?


2014/1/17 Tayson Rodrigues <tayso...@gmail.com>

David de Lucca

unread,
Jan 17, 2014, 8:26:29 AM1/17/14
to wicke...@googlegroups.com
campoUpload.getArquivo() ... isso retorna o que? Um File?


2014/1/17 tetsuo <ronald...@gmail.com>

Tayson Rodrigues

unread,
Jan 17, 2014, 12:02:05 PM1/17/14
to wicke...@googlegroups.com
Senhores problema resolvido graças a voces. Eis meu codigo:

private void converteAnsiParaUft(CampoUpload campoUpload) {
         
         Charset utf8charset = Charset.forName("UTF-8");
        Charset iso88591charset = Charset.forName("ISO-8859-1");

        ByteBuffer inputBuffer = ByteBuffer.wrap(campoUpload.getArquivo().getBytes());

        // encode ISO-8559-1
        CharBuffer data = iso88591charset.decode(inputBuffer);

        // decode UTF-8
        ByteBuffer outputBuffer = utf8charset.encode(data);
        arquivoByte = outputBuffer.array(); 
    }
Dessa forma, arquivoByte  esta com encoding UTF-8
Obrigado !!

Tayson Rodrigues

unread,
Jan 21, 2014, 12:22:06 PM1/21/14
to wicke...@googlegroups.com
Mais uma duvida em relação a esse assunto.....

Como descubro qual o encode de um arquivo ?? Preciso fazer um tratamento para converter diversos tipos para UTF-8.
Agradeço desde ja.

David de Lucca

unread,
Jan 21, 2014, 12:25:00 PM1/21/14
to wicke...@googlegroups.com


2014/1/21 Tayson Rodrigues <tayso...@gmail.com>
Mais uma duvida em relação a esse assunto.....

Como descubro qual o encode de um arquivo ?? Preciso fazer um tratamento para converter diversos tipos para UTF-8.
Agradeço desde ja.

--

Tayson Rodrigues

unread,
Jan 21, 2014, 2:36:59 PM1/21/14
to wicke...@googlegroups.com
Valeu a dica David... Mais acabei caindo em uma situação que me levou a mudar de rumo da outra vez...

byte[] buf = campoUpload.getArquivo().getBytes();
        String fileName = new String(buf);
        java.io.FileInputStream fis = new java.io.FileInputStream(fileName);

O FileInputStream espera o caminho do arquivo ou um File, no entanto meu arquivo esta em cache...tentei passar meu arquivo .txt para uma String(fileName), mais o FileInputStream não aceita, ele tenta procurar o arquivo através da String.

Alguma luz ??

meu codigo completo:

private void testDetector(CampoUpload campoUpload) {

        byte[] buf = campoUpload.getArquivo().getBytes();
        String fileName = new String(buf);
        java.io.FileInputStream fis = new java.io.FileInputStream(fileName);
       
        UniversalDetector detector = new UniversalDetector(null);

        int nread;

            while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
                detector.handleData(buf, 0, nread);
            }
        detector.dataEnd();

        String encoding = detector.getDetectedCharset();
        if (encoding != null) {
            System.out.println("Detected encoding = " + encoding);
        } else {
            System.out.println("No encoding detected.");
        }
        detector.reset();
    }



You received this message because you are subscribed to a topic in the Google Groups "Wicket em Português" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/wicket-ptbr/ldBkDS5pQ6A/unsubscribe.
To unsubscribe from this group and all its topics, send an email to wicket-ptbr...@googlegroups.com.

For more options, visit https://groups.google.com/groups/opt_out.



--
Valter Tayson

David Padilha Coelho De Lucca

unread,
Jan 21, 2014, 2:57:48 PM1/21/14
to wicke...@googlegroups.com, wicke...@googlegroups.com
Este seu construtor é pra criar  arquivo...ja deu uma olhada na classe StringBufferInputStream (java7)? 

David Padilha

Tayson Rodrigues

unread,
Jan 23, 2014, 6:21:29 AM1/23/14
to wicke...@googlegroups.com
Fiz o ajuste usando o StringBufferInputStream e a princípio funcionou, mais o UniversalDetector não esta agindo como deveria, esta identificando errado o tipo de encode.
Alguem ja usou o UniversalDetector ?? Acredito que esta fazendo errado pois estou usando o StringBufferInputStream ao FileInputStream....

COdigo:

byte[] buf = campoUpload.getArquivo().getBytes();
        String fileName = new String(buf);

        StringBufferInputStream teste = new StringBufferInputStream(fileName);
//        FileInputStream fis = new FileInputStream("");


        UniversalDetector detector = new UniversalDetector(null);

        int nread;
        try {
            while ((nread = teste.read(buf)) > 0 && !detector.isDone()) {
                detector.handleData(buf, 0, nread);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        detector.dataEnd();

Obrigado.
Reply all
Reply to author
Forward
0 new messages