So dekodieren Sie Base64 in UTF-8
- Fügen Sie das Base64 in Eingabe · Base64 ein. Der Zeichensatz steht bereits auf UTF-8.
- Lesen Sie das Ergebnis in Ausgabe · Text. Die Statuszeile zeigt die Byteanzahl und den erkannten Inhaltstyp.
- Meldet die Statuszeile „Einige Bytes sind kein gültiges UTF-8“, liegt der Text in einem anderen Zeichensatz vor. Versuchen Sie Automatisch, Windows-1252 oder UTF-16LE.
- Ausgabe kopieren kopiert den Text; Herunterladen speichert die dekodierten Bytes unverändert.
Für die andere Richtung nehmen Sie UTF-8 in Base64.
Beispiele
| Base64 | Als UTF-8 dekodiert | Was es zeigt |
|---|---|---|
8J+YgA== | 😀 | Ein Emoji, 4 Bytes |
4oKs | € | 3 Bytes, kein Padding nötig |
bmHDr3ZlIGNhZsOp | naïve café | Buchstaben mit Akzent, je 2 Bytes |
77u/SGk= | Hi | 5 Bytes: eine Byte-Order-Mark, dann Hi |
Y2Fm6Q== | caf� | E9 ist é in Latin-1, in UTF-8 ungültig |
8J+Y | � | Ein Emoji, nach 3 seiner 4 Bytes abgeschnitten |
Y2Fmw4PCqQ== | café | Gültiges UTF-8 von Text, der schon verstümmelt war |
Die letzten drei Zeilen zeigen die Probleme, um die es weiter unten geht: ein falscher Zeichensatz, eine abgeschnittene Zeichenkette und Text, der schon vor dem Kodieren verstümmelt war.
Ungültiges UTF-8 und das Ersatzzeichen
UTF-8 hat strenge Regeln: Ein Byte über 7F muss Teil einer 2-, 3- oder 4-Byte-Folge mit festem Muster sein. Bytes, die das Muster brechen, lassen sich nicht als UTF-8 lesen. Der Decoder ersetzt jede fehlerhafte Folge durch U+FFFD (�) und fügt den Hinweis „Einige Bytes sind kein gültiges UTF-8. Versuchen Sie einen anderen Zeichensatz.“ hinzu. Nichts wird stillschweigend verworfen, jedes � markiert also genau die Stelle eines Problems.
Zwei Ursachen decken fast jeden Fall ab:
- Ein anderer Zeichensatz.
Y2Fm6Q==enthält63 61 66 E9, das istcaféin ISO-8859-1 und Windows-1252. Stellen Sie den Zeichensatz um, und der Text erscheint. Die Seite Base64-Decoder listet die typischen Symptome je Zeichensatz auf. - Eine abgeschnittene Zeichenkette. Wurde Base64 gekürzt, etwa durch eine Spaltenbegrenzung in einer Datenbank oder eine Logzeile, kann dem letzten Zeichen ein Teil seiner Bytes fehlen.
8J+YgA==ist ein vollständiges Emoji;8J+Yist dasselbe Emoji ohne sein letztes Byte und wird zu einem einzelnen�dekodiert. Suchen Sie den vollständigen Wert an der Quelle.
Doppelt kodierter Text (é und ’)
Zeigt die Ausgabe é statt é, ü statt ü oder ’ statt eines typografischen Apostrophs, liegt es nicht am Decoder. Irgendwo vorher wurden UTF-8-Bytes als Windows-1252 gelesen und wieder als UTF-8 gespeichert, wodurch jedes Sonderzeichen zu zwei oder drei falschen wurde. Das Base64 bewahrt diesen beschädigten Text getreu: Y2Fmw4PCqQ== ist gültiges UTF-8 für die sieben Byte lange Zeichenkette café.
Im Code lässt sich eine solche Zeichenkette oft reparieren, indem man den Fehler umkehrt: den Text als Windows-1252 kodieren und die Bytes als UTF-8 dekodieren. Die eigentliche Lösung liegt im System, das ihn geschrieben hat.
Byte-Order-Marks
Manche Editoren, vor allem unter Windows, beginnen UTF-8-Dateien mit den Bytes EF BB BF, einer Byte-Order-Mark. In Base64 beginnt die Datei dann mit 77u/. Der Decoder erkennt die Markierung und lässt sie im Text weg, während Herunterladen die Bytes genau so behält, wie sie waren. Im Code müssen Sie sie unter Umständen selbst entfernen:
import base64
raw = base64.b64decode("77u/SGk=")
raw.decode("utf-8") # '\ufeffHi'
raw.decode("utf-8-sig") # 'Hi'
base64.b64decode("Y2Fm6Q==").decode("utf-8", errors="replace") # 'caf�'
Ohne errors="replace" wirft Python bei ungültigen Bytes UnicodeDecodeError. In JavaScript wirft new TextDecoder("utf-8", { fatal: true }) einen TypeError, statt � einzufügen, und der Standard-Decoder entfernt die BOM genau wie dieses Tool. Mehr dazu unter Base64 in Python und Base64 in JavaScript.
Häufige Fragen
Wie dekodiere ich Base64 in eine UTF-8-Zeichenkette?
Dekodieren Sie das Base64 zu Bytes und interpretieren Sie die Bytes dann als UTF-8. Oben geschieht das in einem Schritt. In Python ist es base64.b64decode(s).decode("utf-8"), im Browser new TextDecoder().decode(bytes).
Was bedeutet das Zeichen � in der Ausgabe?
Das ist U+FFFD, das Ersatzzeichen. Der Decoder setzt es überall dort ein, wo die Bytes kein gültiges UTF-8 bilden. Meist wurde der Text in einem anderen Zeichensatz kodiert, oder das Base64 wurde abgeschnitten.
Warum beginnt mein dekodierter Text mit einem unsichtbaren Zeichen?
Die Quelle hatte vermutlich eine UTF-8-Byte-Order-Mark (Base64, das mit 77u/ beginnt). Dieses Tool entfernt sie, Pythons einfaches .decode("utf-8") behält sie aber als \ufeff; mit "utf-8-sig" verschwindet sie.
Ist UTF-8 die richtige Wahl für mein Base64?
Sehr wahrscheinlich. JSON, das Web, Linux und moderne APIs verwenden alle UTF-8. Daten aus älteren Windows-Programmen oder aus .NET- und PowerShell-Strings können stattdessen Windows-125x oder UTF-16 sein.