Richtung und Eingabeart
Unter „Richtung“ wählst du „Kodieren“ oder „Dekodieren“.
- Kodieren: Steht die „Eingabeart“ auf „Text“, wird aus dem, was du bei „Ausgangstext“ eingibst, das „Base64-Ergebnis“. Aus
HellowirdSGVsbG8=, auscaféwirdY2Fmw6k=. Stellst du auf „Datei“ um, erscheint ein Feld zum Hochladen einer Datei. - Dekodieren: Gibst du bei „Base64-Zeichenkette“ Base64 oder eine
data:-URL ein, steht unter „Dekodiertes Ergebnis“ der ursprüngliche Text.
Die Schaltflächen „Ins Dekodieren-Feld übernehmen“ und „Ins Kodieren-Feld übernehmen“ neben dem Ergebnis schieben das eben erzeugte Ergebnis als Eingabe in die Gegenrichtung. Praktisch, wenn du etwas Kodiertes gleich wieder zurückwandeln und mit dem Original vergleichen willst.
Das Kontrollkästchen „URL-sicher (-_, ohne Padding)“ gilt für das Kodieren von Text und für das Dekodieren gleichermaßen. Beim Kodieren von Dateien gibt es diese Option nicht.
Übertragen werden Bytes, keine Zeichen
Base64 ist eine Schreibweise, die aus je 3 Bytes 4 Zeichen macht. Um Text zu kodieren, müssen die Zeichen also erst einmal zu Bytes werden, und dafür nimmt dieses Tool immer UTF-8. Das Zeichen € belegt in UTF-8 3 Bytes und ergibt in Base64 deshalb genau 4 Zeichen: 4oKs.
Ist die Zahl der Bytes kein Vielfaches von 3, wird am Ende mit = auf volle 4 Zeichen aufgefüllt. Das ist das Padding.
| Ausgangstext | Bytes | Base64-Ergebnis |
|---|---|---|
a |
1 | YQ== |
ab |
2 | YWI= |
abc |
3 | YWJj |
€ |
3 | 4oKs |
😀 |
4 | 8J+YgA== |
Weil aus 3 Bytes 4 Zeichen werden, ist das Ergebnis rund ein Drittel länger als das Original. Wandelst du eine Datei in eine data-URL um und bettest sie in HTML oder CSS ein, wächst die Datenmenge um genau diesen Anteil.
Die im Browser eingebaute Funktion btoa nimmt nur Zeichen mit Codepunkten von 0 bis 255 an und bricht bei Strings mit Zeichen außerhalb dieses Bereichs, etwa € oder Emojis, mit einem Fehler ab. Dieses Tool verwendet sie nicht, sondern wandelt die UTF-8-Bytes selbst um. Es kodiert deshalb jedes beliebige Zeichen und liest beim Dekodieren ebenfalls UTF-8 zurück.
Was die Option „URL-sicher“ ändert
Standard-Base64 verwendet neben Groß- und Kleinbuchstaben und Ziffern die beiden Zeichen + und / und zum Auffüllen das =. Alle drei haben in einer URL eine eigene Bedeutung. Soll das Ergebnis in eine Adresse, einen Query-Wert oder einen Dateinamen, schaltest du deshalb „URL-sicher (-_, ohne Padding)“ ein. JWT (JSON Web Token) verwendet diese Schreibweise.
| Ausgangstext | Option aus | Option an |
|---|---|---|
>>>??? |
Pj4+Pz8/ |
Pj4-Pz8_ |
a |
YQ== |
YQ |
Beim Dekodieren muss die Option nur dann passen, wenn in der Zeichenkette +, / oder -, _ vorkommen. Gibst du Pj4-Pz8_ bei ausgeschalteter Option ein, kommt der Fehler, dass das Zeichen - nicht gültig ist. Bei Pj4+Pz8/ mit eingeschalteter Option passiert dasselbe beim +. Eine Zeichenkette wie SGVsbG8=, in der keines der vier Zeichen steckt, lässt sich in beiden Einstellungen dekodieren. Das Padding darf unabhängig von der Option vorhanden sein oder fehlen (auch SGVsbG8 wird als Hello gelesen).
Datei zu data-URL, Base64 zurück zur Datei
Stellst du die „Eingabeart“ auf „Datei“, kannst du eine einzelne Datei hineinziehen oder auswählen. Das Format spielt keine Rolle, die Größe darf bis zu 10 MB betragen. Heraus kommt eine data-URL, der der Dateityp vorangestellt ist, zum Beispiel data:image/png;base64,iVBORw0KG.... Du kannst sie unverändert in ein img-Tag in HTML oder in ein url() in CSS einsetzen. Erkennt der Browser den Typ einer Datei nicht, steht dort application/octet-stream. Da Browser eine data-URL in URL-sicherer Schreibweise nicht lesen können, entsteht sie immer in Standardschreibweise mit Padding.
Der Rückweg führt über das Dekodieren. Sobald du Base64 oder eine data-URL eingibst, erscheint neben dem Ergebnis eine Schaltfläche zum Herunterladen. Damit bekommst du auch Inhalte, die kein Text sind, als Datei.
- Bei einer data-URL wird nur der Teil hinter
base64,gelesen, und zwar in Standardschreibweise, auch wenn das Kontrollkästchen „URL-sicher“ eingeschaltet ist. - Der Dateiname lautet
decodedplus Endung. Nennt die data-URL eines der Formate PNG, JPEG, GIF, WebP, SVG, ICO, PDF, TXT, CSV, JSON, ZIP, MP3 oder MP4, bekommt die Datei die passende Endung (etwadecoded.png). - Bei jedem anderen Format und bei reinem Base64 ohne Typangabe heißt die Datei
decoded.bin. Kennst du das ursprüngliche Format, änderst du die Endung nach dem Herunterladen einfach selbst. - Eine data-URL ohne
;base64, etwadata:text/plain,hello, ist kein Base64. Hier kommt der Fehler, dass das Zeichen:nicht gültig ist.
Drei Fehler beim Dekodieren
| Fehlermeldung | Bei dieser Eingabe | Bedeutung |
|---|---|---|
| Dieses Zeichen ist in Base64 nicht gültig | Pj4-Pz8_ (Option aus) |
In der Eingabe steht ein Zeichen, das es in der gerade gewählten Schreibweise nicht gibt. Die Meldung nennt das Zeichen. |
| Die Base64-Länge oder das Padding (=) ist nicht gültig | SGVsb, SGVsbG8== |
Die Zahl der Zeichen geht nicht auf, oder es stehen zu viele = da oder eines mittendrin. Häufig, wenn beim Kopieren das Ende abgeschnitten wurde. |
| Die dekodierten Bytes sind kein gültiger UTF-8-Text | iVBORw0KGgo= |
Als Base64 ist die Eingabe in Ordnung, der Inhalt ist aber kein Text. |
Im dritten Fall erscheint neben dem Ergebnis „Als Hex anzeigen“. Ein Klick listet die Bytes als zweistellige Hexadezimalzahlen auf, mit „Als Text anzeigen“ geht es zurück. Für iVBORw0KGgo= lautet die Hex-Ansicht 89 50 4e 47 0d 0a 1a 0a. Das zweite bis vierte Byte (50 4e 47) sind die Buchstaben PNG, es handelt sich also um den Anfang einer PNG-Datei. Die Schaltfläche zum Herunterladen funktioniert auch, während dieser Fehler angezeigt wird.
