Como codificar XML em Base64
- Cole o documento XML em Entrada · texto, ou clique em Exemplo para carregar um pequeno.
- Ajuste o Charset para a codificação indicada na declaração XML. UTF-8 vem pré-selecionado e é o certo para a maioria dos documentos.
- Copie o resultado de Saída · Base64. Deixe Quebra de linha em Nenhuma para campos JSON e HTTP; alguns protocolos baseados em XML aceitam linhas de 76 caracteres.
- Baixar salva o Base64 como
base64.txt.
O exemplo, uma declaração XML seguida de um elemento <note>, vira uma string que começa com PD94bWwg, o Base64 de <?xml . Quase todo documento XML com declaração começa assim, o que torna o XML codificado fácil de reconhecer. Base64 para XML o decodifica de volta.
Combine o charset com a declaração XML
Um parser XML decide como ler os bytes a partir do atributo encoding da declaração (ou de um byte order mark). Se os bytes e a declaração discordam, o lado que recebe lê caracteres diferentes dos que você escreveu.
| Documento | Charset usado aqui | Base64 | O parser lê |
|---|---|---|---|
<?xml version="1.0" encoding="ISO-8859-1"?><n>café</n> | ISO-8859-1 | PD94bWwg...PjxuPmNhZuk8L24+ | café |
| O mesmo documento | UTF-8 | PD94bWwg...PjxuPmNhZsOpPC9uPg== | café |
A segunda linha é um bug clássico de integração: o texto foi salvo como UTF-8, mas ainda declara Latin-1. Escolha aqui o charset declarado ou, melhor, mude a declaração para UTF-8 e mantenha UTF-8 em todo lugar.
Onde o XML viaja como Base64
- APIs SOAP e REST que aceitam um documento XML inteiro dentro de um campo JSON ou XML, para que os sinais de menor e maior e as aspas não precisem de escape. Serviços de nota fiscal eletrônica e EDI costumam receber notas (por exemplo, documentos UBL) assim.
- Single sign-on SAML. Uma resposta SAML é um documento XML, codificado em Base64 e enviado pelo navegador via POST. O decodificador SAML transforma valores
SAMLResponseeSAMLRequestde volta em XML. - Configuração e segredos. Arquivos de configuração XML guardados em variáveis de ambiente ou em Secrets do Kubernetes ficam em Base64 para caber em uma linha.
Quando um documento é assinado digitalmente (XML-DSig, usado no SAML e em muitos esquemas de nota fiscal eletrônica), codifique os bytes exatos que você recebeu ou gerou. Reindentar, mudar as quebras de linha ou salvar o arquivo de novo em um editor pode invalidar a assinatura, mesmo que o XML signifique a mesma coisa.
Tamanho e quebra de linha
O Base64 acrescenta cerca de 33% ao documento. O XML já é verboso por natureza, então documentos grandes costumam ser compactados com gzip antes de codificar; a ferramenta gzip e Base64 faz as duas etapas. Quebra de linha em 76 caracteres é aceita por transportes baseados em MIME e pela maioria dos validadores de XML Schema para conteúdo xs:base64Binary. APIs baseadas em JSON normalmente esperam uma única linha contínua.
XML para Base64 no código
Leia o arquivo como bytes e codifique esses bytes, para que a declaração e os bytes não possam divergir:
import base64
with open("invoice.xml", "rb") as f:
b64 = base64.b64encode(f.read()).decode("ascii")
// Node.js
const fs = require("fs");
const b64 = fs.readFileSync("invoice.xml").toString("base64");
No Linux, base64 -w 0 invoice.xml imprime a mesma linha única. Veja Base64 em Python e Base64 em Node.js para streaming de arquivos grandes.
Perguntas frequentes
Como converter um arquivo XML para Base64?
Cole o XML acima e copie o resultado. Para arquivos, codifique os bytes brutos em vez de digitar o texto de novo: base64.b64encode(open("doc.xml", "rb").read()) em Python, ou base64 -w 0 doc.xml no Linux.
Qual charset devo escolher para XML?
O da declaração XML. <?xml version="1.0" encoding="UTF-8"?> ou a ausência do atributo encoding significa UTF-8, o padrão. Se disser ISO-8859-1 ou Windows-1252, escolha esse, ou mude a declaração para UTF-8.
Posso reformatar o XML antes de codificá-lo?
Só se nada depender dos bytes exatos. A indentação muda o Base64 e, em XML assinado (assertions SAML, notas fiscais assinadas), pode quebrar a assinatura.
Onde entra o xs:base64Binary?
Esse tipo do XML Schema é o caso inverso: Base64 dentro de um elemento XML, usado para embutir arquivos em mensagens SOAP e notas fiscais. Codifique o arquivo com Arquivo para Base64 e cole o resultado no elemento.