Oi pessoal, estou tendo um probleminha, espero que alguém possa me ajudar…
Eu tenho alguns arquivos xml que estão em formato ANSI, só que quando vou fazer um parse para ler estes arquivos ele emite a seguinte exceção : Invalid byte 2 of 3-byte UTF-8 sequence. , pois bem, se eu modifico no editor de texto para UTF-8 ele funciona normalmente… gostaria de saber como faço isso através de codificação.
Você só precisa omitir o "encoding" e esse cabeçalho se usar UTF-8, como você deve ter percebido.
Você pode escolher entre converter os seus arquivos, ou então corrigi-los.
Para converter, é relativamente fácil. Digamos que você tenha um arquivo em ISO-8859-1 e queira convertê-lo para UTF-8.
Você pode ler o arquivo com a codificação ISO-8859-1 e gravá-lo com UTF-8, mais ou menos assim:
import java.io.*;
class Conversor {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader (new InputStreamReader (new FileInputStream
("entrada.xml"), "ISO-8859-1"));
BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (new FileOutputStream
("saida.xml"), "UTF-8"));
for (String linha = br.readLine(); linha != null; linha = br.readLine())
{
bw.write (linha); bw.newLine();
}
bw.close();
br.close();
}
}
Obviamente você precisa tratar as exceções e encapsular o código acima em um método que receba os nomes dos arquivos de entrada e saída.
A propósito, alguém sabe como eu faço para verificar o encoding do arquivo?
Pq se eu converter uma vez para ler, e depois de editado eu querer ler esse arquivo novamente, os caracteres ficam bagunçados… portanto tenhod e testar antes se o arquivo já está em UTF-8.
Agora você fez aquela famosa pergunta de US$ 1.000.000,00…
Você pode “chutar” o encoding, mas não é fácil obter uma resposta perfeita. Você deve ter visto que isso dá problemas no Firefox ou no IE quando você põe aquela opção de eles tentarem achar automaticamente o encoding das páginas.
Uma forma boba que nem sempre funciona é:
Ler um pedaço do arquivo;
Ver se é UTF-8 (se houver algum erro de decodificação, não é UTF-8);
Basicamente, se você codificar um texto ISO-8859-1 em UTF-8, vai ver que as letras acentuadas são convertidas para 2 bytes, sendo que o primeiro é fixo. Como esse teste é meio chato de fazer, é mais fácil tentar converter os bytes para UTF-8, e se der alguma exception, então não é UTF-8.
Ok thingol, obrigada mais uma vez… fiz os devidos testes conforme indicado por vc , só que o problema agora é qdo abre o arquivo pela primeira vez, pois os caracteres vêm bagunçados… pela segunda vez após editado este está funcionando perfeitamente… :lol: