Pessoal, bom dia 
A dias tentando entender o que acontece de errado num exemplo que tenho sobre conversão de caracteres especiais(exemplo: ‘ç’ por ‘c’) em arquivos XML, venho postar essa dúvida com vocês.
Tenho uma função que converte caracteres especiais em Java. Realizando alguns testes, percebi que para arquivos XML, a conversão não tem sucesso. Testando em arquivos .txt, a conversão acontece normalmente.
Como converto caracteres especiais em arquivos xml no java?
Vou postar um exemplo que tenho aqui (provavelmente está faltando algo ou está incorreto):
package caractereespecial;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.*;
import java.text.Normalizer.Form;
public class Altera
{
public static String lerXML(String fileXML) throws IOException
{
String linha = "";
StringBuilder xml = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(fileXML)));
while ((linha = in.readLine()) != null) {
xml.append(linha);
}
in.close();
return xml.toString();
}
public static String normalizar(String stringAcentuada)
{
return Normalizer.normalize(stringAcentuada, Form.NFD).replaceAll("[^\\p{ASCII}]", "");
}
//Trata caracteres especiais
public static String trataCaracteres(String xml)
{
/*
String[] caractereBranco = {
"\\º", "\\*", "\\'", "\\º", "\\&", "\\°", "\\§", "\\ª", "\\Ø", "\\ø"};
for (int i = 0; i < caractereBranco.length; i++)
{
xml = xml.replaceAll(caractereBranco[i], "");
}
*
*/
xml = xml.replaceAll("à", "a");
xml = xml.replaceAll("ã", "a");
xml = xml.replaceAll("á", "a");
xml = xml.replaceAll("â", "a");
xml = xml.replaceAll("è", "e");
xml = xml.replaceAll("ê", "e");
xml = xml.replaceAll("é", "e");
xml = xml.replaceAll("í", "i");
xml = xml.replaceAll("õ", "o");
xml = xml.replaceAll("ó", "o");
xml = xml.replaceAll("ô", "o");
xml = xml.replaceAll("ú", "u");
xml = xml.replaceAll("ç", "c"); //ç não converte para c =/
xml = xml.replaceAll("ñ", "n");
xml = xml.replaceAll("À", "A");
xml = xml.replaceAll("Ã", "A");
xml = xml.replaceAll("Á", "A");
xml = xml.replaceAll("Â", "A");
xml = xml.replaceAll("È", "E");
xml = xml.replaceAll("Ê", "E");
xml = xml.replaceAll("É", "E");
xml = xml.replaceAll("Í", "I");
xml = xml.replaceAll("Ô", "O");
xml = xml.replaceAll("Ó", "O");
xml = xml.replaceAll("Ú", "U");
xml = xml.replaceAll("Ç", "c");
xml = xml.replaceAll("Ñ", "n");
return xml;
}
}
package caractereespecial;
import java.io.FileWriter;
import java.io.IOException;
public class CaractereEspecial {
public static void main(String[] args) throws IOException
{
String caminhoXML = "D:\\carros.xml";
//String caminhoXML = args[0];
String xmlEnvio = Altera.lerXML(caminhoXML);
System.out.println(xmlEnvio);
String xmlTratado = Altera.trataCaracteres(xmlEnvio);
System.out.println("\n\n\n\n\n" + xmlTratado);
FileWriter fw = new FileWriter("D:\\crt_especial.xml");
fw.write(xmlTratado);
fw.close();
/*
byte[] bytes = xmlTratado.getBytes("UTF-8");
FileOutputStream out = new FileOutputStream("D:\\crt_especial1.xml");
out.write(bytes);
out.close();
*
*/
}
}
Queria a opinião de vocês sobre o problema. Existe alguma API especifica que soluciona o problema? Alguém tem algum exemplo em Java?
Agradeço a ajuda desde já. 