Problema com caracteres acentuados do arquivo de texto baixado da web

4 respostas
bobboyms

pessoal como faço com os caracteres acentuados do download que fasso do arquivo de um site
olhem o código abaixo. ele grava em um arquivo de texto porem os carecteres acentuados ficam tronxos,
alguem pode me dar um help??

package sitesockt;

import java.net.*;
import java.io.*;

/**
 *
 * @author thiago
 */
public class Main {

       
    public static void main(String[] args) {

        try {

          URL url = new URL("http://www.bol.com.br");
          InputStreamReader in = new InputStreamReader(url.openStream());
          BufferedReader rd = new BufferedReader(in);

          File file = new File("bol.html");
          FileWriter arquivo = new FileWriter(file);
          PrintWriter saida = new PrintWriter(arquivo);

          String linha = null;
         
          while((linha = rd.readLine()) != null) {
              System.out.println(linha);
              saida.println(linha);
          }

          arquivo.close();
          saida.close();

        } catch(IOException e) {
            System.out.println(e.getMessage());
        }
    }

}

aguardo ajuda, abrços

4 Respostas

B

O problema está no encoding do texto. Use Unicode.

Dê uma olhada na classe DataOutputStream, seu método writeUTF(String) é de particular interesse.

Veja também sua contraparte, DataInputStream, e seus métodos, readUTF() e readUTF(DataInput).

M

Como está trabalando apenas com texto, pode-se usar Scanner e PrintWriter especificando o encoding. Os servidores geralmente usam enconding UTF-8, assim como os sistemas operacionais não-Windows fazem por padrão (o Windows usa um charset próprio por padrão - tinha que ser diferente…).

Um exemplo para leitura e escrita em UTF-8 (se estiver rodando em Windows, provavelmente terá que mudar o charset de escrita):

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = null;
		PrintWriter out = null;
		try {
			URL url = new URL("http://www.bol.com.br");
			// entrada
			in = new Scanner(url.openStream(), "UTF-8");
			// saída
			File file = new File("bol.html");
			out = new PrintWriter(file, "UTF-8");
			// leitura/escrita
			while (in.hasNextLine()) {
				String linha = in.nextLine();
				System.out.println(linha);
				out.println(linha);
			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.close();
			}
		}
	}

}
bobboyms

parece que esse é o caminho mas porem dou um print do contúdo ele vai, com os caracteres corretos.
só que nem todo o buffer do arquivo do site é mostrado…
como eu fasso a leitura linha a linha com o DataInputStrean usando o readUTF…
talvez a leitura linha linha resolva

abaixo segue o código aguardo ajudas

package sitesockt;

import java.net.*;
import java.io.*;

/**
 *
 * @author thiago
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    
    public static void main(String[] args) {

        try {

          URL url = new URL("http://bobboy.wordpress.com");
          //InputStreamReader in = new InputStreamReader(url.openStream());
          DataInputStream imput = new DataInputStream(url.openStream());



          //BufferedReader rd = new BufferedReader(in);

          File file = new File("bol.html");
          FileWriter arquivo = new FileWriter(file);
          PrintWriter saida = new PrintWriter(arquivo);

          String linha = null;

          System.out.println(imput.readUTF(imput));
          //saida.println(imput.readUTF());

         // while((linha = imput.readUTF(imput)) != null) {
         //     System.out.println(linha);
         //     //saida.println(linha);
         // }

          /*
          while((linha = imput.readLine()) != null) {
              System.out.println(linha);
              saida.println(linha);
          }
          */
          /*
          while((linha = rd.readLine()) != null) {
              System.out.println(linha);
              saida.println(linha);
          }
          */
          
          arquivo.close();
          saida.close();

        } catch(IOException e) {
            System.out.println(e.getMessage());
        }
    }

}
bobboyms

marcão… obrigado pela sua luz ó funcionou perfeitinho
realmente existe a diferença entre os sistemas unix e win olhe só

em S.O linux/unix = UTF-8 // funciona perfeito
em S.O win = “ISO-8859-1” // pra win

package sitesockt;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner in = null;
		PrintWriter out = null;
		try {
			URL url = new URL("http://www.bol.com.br");
			// entrada
			in = new Scanner(url.openStream(), "ISO-8859-1");
			// saída
			File file = new File("bol.html");
			out = new PrintWriter(file, "ISO-8859-1");
			// leitura/escrita
			while (in.hasNextLine()) {
				String linha = in.nextLine();
				System.out.println(linha);
				out.println(linha);
			}
		} catch (IOException e) {
			System.out.println(e.getMessage());
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.close();
			}
		}
	}

}
Criado 31 de janeiro de 2010
Ultima resposta 31 de jan. de 2010
Respostas 4
Participantes 3