JavaScript/Window/btoa

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Funktion btoa() codiert einen (binären) String nach Base64 (daher auch btoa: binary to ascii).

  • Chrome
  • Firefox
  • IE
  • Opera
  • Safari

Syntax

btoa(String)

  • String: ein binärer String

Bei der Base64-Codierung werden jeweils 3 Bytes so auf 4 Bytes verteilt, dass jedes der 4 Byte ein ASCII-Zeichen ohne Sonderzeichen ist; der Wertebereich umfasst die 64 Zeichen

  • a-z (26 Zeichen)
  • A-Z (26 Zeichen)
  • 0-9 (10 Zeichen)
  • +
  • /

Falls die Länge der Eingabe nicht durch 3 teilbar ist, wird das Gleichheitszeichen (=) am Ende zum Auffüllen („Padding“) verwendet. Der zu Grunde liegende Algorithmus ist in RFC 4648 beschrieben.

Anwendungsbeispiele[Bearbeiten]

Einfaches Anwendungsbeispiel[Bearbeiten]

Beispiel ansehen …
document.addEventListener('DOMContentLoaded', function(evt) {
	document.getElementById('enc').addEventListener('click', encode);
});

function encode() {
	document.getElementById('aus').textContent =
		btoa(document.getElementById('ein').value);
}
Das Beispiel stellt einen einfachen (einzeiligen) Base64-Codierer dar: Die Eingabe aus dem Eingabefeld wird base64-codiert im output-Element ausgegeben. Schreibt man beispielsweise Hallo hinein, wird SGFsbG8= ausgegeben.
Beachten Sie: Dieses Beispiel funktioniert nur für Strings, in denen jedes Zeichen auch nur ein Byte belegt. Die Eingabe von Zeichen wie wirft daher einen InvalidCharacterError.

Unicode-Strings[Bearbeiten]

Um Zeichen mit mehr als einem Byte zu kodieren muss zuerst ein binärer String als Byte-Array erzeugt werden. Obiges Beispiel kann dann wie folgt aussehen [1]:

Beispiel ansehen …
document.addEventListener('DOMContentLoaded', function(evt) {
	document.getElementById('encu').addEventListener('click', encode);
});

function encode() {
	let s = document.getElementById('einu').value;
	let uc = new Uint16Array(s.length);

	for (let i = 0; i < uc.length; ++i) {
		uc[i] = s.charCodeAt(i);
	}

	document.getElementById('ausu').textContent =
		btoa(String.fromCharCode(...new Uint8Array(uc.buffer)));
}
Dieses Beispiel stellt einen einfachen (einzeiligen) Base64-Codierer dar, der auf Unicode-Zeichen operiert: Die Unicode-Eingabe aus dem Eingabefeld wird in Byte-Array konvertiert und dann base64-codiert im output-Element ausgegeben. Schreibt man beispielsweise Hallo hinein, wird SABhAGwAbABvAA== ausgegeben, ergibt kyE=.
Beachten Sie: Die Ausgabe dieser Variante ist ein UTF-16-String.

Quellen[Bearbeiten]

  1. MDN: WindowOrWorkerGlobalScope.btoa()

Weblinks[Bearbeiten]