So kodieren Sie XML in Base64
- Fügen Sie das XML-Dokument in Eingabe · Text ein, oder drücken Sie Beispiel, um ein kleines zu laden.
- Stellen Sie Zeichensatz auf die Kodierung, die die XML-Deklaration nennt. UTF-8 ist vorausgewählt und für die meisten Dokumente richtig.
- Kopieren Sie das Ergebnis aus Ausgabe · Base64. Lassen Sie Zeilenumbruch für JSON- und HTTP-Felder auf Keiner; manche XML-basierten Protokolle akzeptieren Zeilen à 76 Zeichen.
- Herunterladen speichert das Base64 als
base64.txt.
Das Beispiel, eine XML-Deklaration gefolgt von einem <note>-Element, ergibt einen String, der mit PD94bWwg beginnt, dem Base64 von <?xml . Fast jedes XML-Dokument mit Deklaration beginnt so, daher ist kodiertes XML leicht zu erkennen. Base64 in XML dekodiert es wieder.
Den Zeichensatz an die XML-Deklaration anpassen
Ein XML-Parser entscheidet anhand des Attributs encoding in der Deklaration (oder einer Byte-Order-Mark), wie er die Bytes liest. Passen Bytes und Deklaration nicht zusammen, liest die Empfängerseite andere Zeichen, als Sie geschrieben haben.
| Dokument | Hier verwendeter Zeichensatz | Base64 | Der Parser liest |
|---|---|---|---|
<?xml version="1.0" encoding="ISO-8859-1"?><n>café</n> | ISO-8859-1 | PD94bWwg...PjxuPmNhZuk8L24+ | café |
| Dasselbe Dokument | UTF-8 | PD94bWwg...PjxuPmNhZsOpPC9uPg== | café |
Die zweite Zeile ist ein klassischer Integrationsfehler: Der Text wurde als UTF-8 gespeichert, deklariert aber noch Latin-1. Wählen Sie hier entweder den deklarierten Zeichensatz oder, besser, ändern Sie die Deklaration auf UTF-8 und bleiben Sie überall bei UTF-8.
Wo XML als Base64 reist
- SOAP- und REST-APIs, die ein ganzes XML-Dokument in einem JSON- oder XML-Feld annehmen, damit spitze Klammern und Anführungszeichen nicht maskiert werden müssen. E-Rechnungs- und EDI-Dienste nehmen Rechnungen (zum Beispiel UBL-Dokumente) oft so entgegen.
- SAML-Single-Sign-on. Eine SAML-Response ist ein XML-Dokument, Base64-kodiert und vom Browser per POST gesendet. Der SAML-Decoder macht aus
SAMLResponse- undSAMLRequest-Werten wieder XML. - Konfiguration und Secrets. XML-Konfigurationsdateien, die in Umgebungsvariablen oder Kubernetes Secrets liegen, sind Base64, damit sie in eine Zeile passen.
Ist ein Dokument digital signiert (XML-DSig, verwendet in SAML und vielen E-Rechnungsverfahren), kodieren Sie genau die Bytes, die Sie erhalten oder erzeugt haben. Neu einrücken, Zeilenenden ändern oder die Datei in einem Editor neu speichern kann die Signatur ungültig machen, obwohl das XML dasselbe bedeutet.
Größe und Zeilenumbruch
Base64 macht das Dokument etwa 33 % größer. XML ist von vornherein ausführlich, daher werden große Dokumente vor dem Kodieren oft mit gzip komprimiert; das Tool für gzip und Base64 erledigt beide Schritte. Zeilenumbruch bei 76 Zeichen akzeptieren MIME-basierte Transportwege und die meisten XML-Schema-Validatoren für Inhalte vom Typ xs:base64Binary. JSON-basierte APIs erwarten meist eine einzige ununterbrochene Zeile.
XML in Base64 im Code
Lesen Sie die Datei als Bytes und kodieren Sie diese, damit Deklaration und Bytes nicht auseinanderlaufen können:
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");
Unter Linux gibt base64 -w 0 invoice.xml dieselbe einzelne Zeile aus. Zum Streamen großer Dateien siehe Base64 in Python und Base64 in Node.js.
Häufige Fragen
Wie wandle ich eine XML-Datei in Base64 um?
Fügen Sie das XML oben ein und kopieren Sie das Ergebnis. Bei Dateien kodieren Sie besser die rohen Bytes, statt den Text abzutippen: base64.b64encode(open("doc.xml", "rb").read()) in Python oder base64 -w 0 doc.xml unter Linux.
Welchen Zeichensatz sollte ich für XML wählen?
Den aus der XML-Deklaration. <?xml version="1.0" encoding="UTF-8"?> oder kein encoding-Attribut bedeutet UTF-8, die Voreinstellung. Steht dort ISO-8859-1 oder Windows-1252, wählen Sie das, oder ändern Sie die Deklaration auf UTF-8.
Darf ich das XML vor dem Kodieren neu formatieren?
Nur wenn nichts von den exakten Bytes abhängt. Einrückung ändert das Base64, und bei signiertem XML (SAML-Assertions, signierte Rechnungen) kann sie die Signatur brechen.
Was hat es mit xs:base64Binary auf sich?
Dieser XML-Schema-Typ ist der umgekehrte Fall: Base64 in einem XML-Element, um Dateien in SOAP-Nachrichten und Rechnungen einzubetten. Kodieren Sie die Datei mit Datei in Base64 und fügen Sie das Ergebnis in das Element ein.