Signatur
Beschreibung
Uint8Array.fromBase64() ist eine statische Methode, die einen Base64-String direkt in Binärdaten umwandelt. Bisher war dafür meist ein Umweg über atob() nötig: Man bekam einen „binären String“ und musste ihn Zeichen für Zeichen mit charCodeAt() in ein Byte-Array kopieren. Die neue Methode erledigt das in einem Schritt, ist schneller und liefert sofort ein typisiertes Array.
Typische Einsatzfälle sind das Dekodieren von Data-URLs, JWT-Bestandteilen, kryptografischen Schlüsseln und Signaturen (z. B. für die SubtleCrypto-API), von Binär-Anhängen in JSON-APIs oder von WebAuthn-Daten. Über die Option alphabet: "base64url" lassen sich auch URL-sichere Varianten mit - und _ direkt verarbeiten, ohne die Zeichen vorher per replace() umzuschreiben.
ASCII-Leerraum (Leerzeichen, Tabulatoren, Zeilenumbrüche) im Eingabestring wird übersprungen, deshalb funktionieren auch MIME-typisch umbrochene Base64-Blöcke. Ungültige Zeichen lösen dagegen einen SyntaxError aus. Wie mit einem unvollständigen letzten Block (fehlendes Padding) umgegangen wird, steuert die Option lastChunkHandling.
Wenn du in ein vorhandenes Array dekodieren willst, statt ein neues anzulegen, nimm Uint8Array.prototype.setFromBase64(). Die Gegenrichtung übernimmt Uint8Array.prototype.toBase64().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der Base64- bzw. Base64URL-kodierte String. Leerraum wird ignoriert. Ist der Wert kein String, wird ein TypeError ausgelöst. Eine automatische Umwandlung findet nicht statt. |
|
| $options | object | {} | Optionales Objekt mit Einstellungen zum Dekodieren. |
| $options.alphabet | "base64" | "base64url" | "base64" | Gibt das Alphabet an. "base64" verwendet + und /, "base64url" verwendet - und _. Zeichen aus dem jeweils anderen Alphabet führen zu einem SyntaxError. |
| $options.lastChunkHandling | "loose" | "strict" | "stop-before-partial" | "loose" | Legt fest, wie der letzte Block behandelt wird.
|
Rückgabewert
Uint8Array mit den dekodierten Bytes. Es hat einen eigenen, frisch angelegten ArrayBuffer.Beispiele
Base64-String in Bytes und Text umwandeln
const bytes = Uint8Array.fromBase64("SGFsbG8=");
console.log(bytes);
// Bytes als UTF-8-Text interpretieren
const text = new TextDecoder().decode(bytes);
console.log(text);
JWT-Payload mit Base64URL dekodieren
const token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0MiJ9.signatur";
const [, payloadPart] = token.split(".");
// Kein replace(/-/g, "+") mehr nötig, Padding fehlt bei JWTs ohnehin
const payloadBytes = Uint8Array.fromBase64(payloadPart, { alphabet: "base64url" });
const payload = JSON.parse(new TextDecoder().decode(payloadBytes));
console.log(payload.sub);
Unvollständigen letzten Block mit lastChunkHandling steuern
const input = "SGFsbG8"; // Padding "=" fehlt
console.log(Uint8Array.fromBase64(input)); // loose (Standard)
console.log(Uint8Array.fromBase64(input, { lastChunkHandling: "stop-before-partial" }));
try {
Uint8Array.fromBase64(input, { lastChunkHandling: "strict" });
} catch (err) {
console.log(err.name);
}
Funktionsprüfung mit Rückfall auf atob()
const base64ToBytes = (b64) =>
typeof Uint8Array.fromBase64 === "function"
? Uint8Array.fromBase64(b64)
: Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
// z. B. Rohschlüssel für die Web Crypto API importieren
const keyBytes = base64ToBytes("AAECAwQFBgcICQoLDA0ODw==");
console.log(keyBytes.length);