Codificação de caracteres

3 respostas
R

Ola pessoal

Alguem sabe como alterar a codifição de caracteres de um arquivo de texto gerado em Java?

Estou trabalhando com o seguinte codigo:

FileWriter writer = new FileWriter(new File(c:/Temp/dump.sql));

PrintWriter saida = new PrintWriter(writer, true);

saida.println("…")

3 Respostas

T
import java.io.*;

/**
 * Esta classe converte o arquivo entrada.txt (codificação ISO-8859-1) para o arquivo
 * saida.txt (codificação UTF-8).
 */
class TrocaCodificacao {
    public static void main(String[] args) throws Exception {
        
        BufferedReader br = new BufferedReader (new InputStreamReader (new FileInputStream ("entrada.txt"), "ISO-8859-1"));
        BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (new FileOutputStream ("saida.txt"), "UTF-8"));
        String line;
        while ((line = br.readLine()) != null) {
            bw.write (line);
            bw.newLine();
        }
        br.close();
        bw.close();
    }
}
1112

Usando OutputStreamWriter e InputStreamReader, você pode especificar o encoding.

Dê uma olhada em http://java.sun.com/j2se/1.5.0/docs/api/java/io/OutputStreamWriter.html e http://java.sun.com/j2se/1.5.0/docs/api/java/io/InputStreamReader.html .

Eu acho que FileWriter e FileReader, sendo subclasses destas duas, também deveriam poder ter o encoding aberto (elas sempre usam o default), mas fazer o quê. :?

T

#@®®¡$:

Eu acho que FileWriter e FileReader, sendo subclasses destas duas, também deveriam poder ter o encoding aberto (elas sempre usam o default), mas fazer o quê. :?

Eis um problema de passar parâmetros no construtor.
Se fosse apenas um “setter” (digams setEncoding) o cara que designou as classes do java.io não teria ficado com preguiça de pôr um construtor em FileWriter e FileReader que fizesse o desejado.
(Acho que ele achou que os usuários iriam naturalmente usar o InputStreamReader e o OutputStreamWriter se precisassem alterar o encoding. Você sabe que isso quer dizer “ser esperto demais” - supor que a gente, como pobre usuário, vai pensar a mesma coisa que o designer).
Como é no construtor, você acaba tendo de fazer esses encadeamentos que incluem uma chamada a “InputStreamReader” ou “OutputStreamWriter”.

Criado 10 de maio de 2006
Ultima resposta 10 de mai. de 2006
Respostas 3
Participantes 3