1
resposta

Erro de Caracteres no XML

Pessoal, eu tenho uma função aqui que recebe um texto no formato XML montado, aí eu pego e assino o XML com o certificado digital... Até aí, tudo bem... contudo, esse texto tem acentuação e "ç". E tem que ir assim pq é para a receita. Contudo, ao voltar com ele depois de assinado, não consigo retornar com a mesma formatação, ou seja, com os caracteres acentuados e "ç"

para o retorno uso TransformerFactory

private String outputXML(Document doc) throws TransformerException {    
    ByteArrayOutputStream os = new ByteArrayOutputStream();    
    TransformerFactory tf = TransformerFactory.newInstance();    
    Transformer trans = tf.newTransformer();    
    trans.transform(new DOMSource(doc), new StreamResult(os));    
    String xml = os.toString();    
    if ((xml != null) && (!"".equals(xml))) {    
        xml = xml.replaceAll("\\r\\n", "");    
        xml = xml.replaceAll(" standalone=\"no\"", "");    
    }    
    return xml;    
}    
1 resposta

Olá Jorge, tudo bem?

Você pode tentar definir a codificação como UTF-8 ao criar o Transformer:

trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

Dessa forma, o Transformer irá utilizar a codificação UTF-8 ao transformar o documento em uma String. Isso deve garantir que os caracteres acentuados e "ç" sejam preservados corretamente.

Aqui está o código atualizado:

private String outputXML(Document doc) throws TransformerException {    
    ByteArrayOutputStream os = new ByteArrayOutputStream();    
    TransformerFactory tf = TransformerFactory.newInstance();    
    Transformer trans = tf.newTransformer();    
    trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // Adicionando a codificação UTF-8
    trans.transform(new DOMSource(doc), new StreamResult(os));    
    String xml = os.toString();    
    if ((xml != null) && (!"".equals(xml))) {    
        xml = xml.replaceAll("\\r\\n", "");    
        xml = xml.replaceAll(" standalone=\"no\"", "");    
    }    
    return xml;    
}

Espero que isso resolva o problema e que você consiga retornar o XML com a formatação correta. Se tiver mais alguma dúvida, é só perguntar!