Signatur
Beschreibung
Die Methode encode() einer TextEncoder-Instanz wandelt einen JavaScript-String (intern UTF-16) in eine UTF-8-Bytefolge um und gibt sie als neues Uint8Array zurück. TextEncoder unterstützt ausschließlich UTF-8. Andere Kodierungen lassen sich damit nicht erzeugen.
Man braucht die Methode immer dann, wenn Text als Binärdaten weiterverarbeitet werden muss, zum Beispiel beim Hashen mit crypto.subtle.digest(), beim Senden über WebSockets oder fetch mit binärem Body, beim Schreiben in ArrayBuffer-basierte Formate oder beim Ermitteln der tatsächlichen Byte-Länge eines Strings.
Jeder Aufruf legt einen neuen Puffer an. Wenn du oft in einen vorhandenen Puffer schreiben willst, ist TextEncoder.prototype.encodeInto() effizienter, weil dabei keine zusätzliche Allokation anfällt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string | string | "" | Der zu kodierende Text. Andere Werte werden per String() in einen String umgewandelt. Ohne Argument entsteht ein leeres Uint8Array. |
Rückgabewert
Uint8Array mit den UTF-8-Bytes des Strings.Beispiele
String in UTF-8-Bytes umwandeln
const encoder = new TextEncoder();
const bytes = encoder.encode('Grüße €');
console.log(bytes);
console.log('Zeichen:', 'Grüße €'.length, '– Bytes:', bytes.length);
SHA-256-Hash eines Textes berechnen
const sha256 = async (text) => {
const data = new TextEncoder().encode(text);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
return [...new Uint8Array(hashBuffer)]
.map((b) => b.toString(16).padStart(2, '0'))
.join('');
};
console.log(await sha256('hallo'));
Byte-Länge vor dem Speichern prüfen
const MAX_BYTES = 16;
const encoder = new TextEncoder();
const passtInLimit = (text) => encoder.encode(text).byteLength <= MAX_BYTES;
console.log(passtInLimit('Hallo Welt'));
console.log(passtInLimit('😀😀😀😀😀'));
Rundreise mit TextDecoder
const bytes = new TextEncoder().encode('Äpfel & Öl');
const text = new TextDecoder().decode(bytes);
console.log(text);
// Wichtig · Fallstricke
- Nur UTF-8: Anders als ältere Entwürfe der Spezifikation nimmt der Konstruktor keinen Kodierungsparameter an, und
encoder.encodingist immer"utf-8". Für Kodierungen wie ISO-8859-1 brauchst du eine Bibliothek. - Einzelne Surrogate: Ungepaarte Surrogate wie
'\uD800'werden durch U+FFFD (BytesEF BF BD) ersetzt. Die Umwandlung ist dann verlustbehaftet. length≠ Byte-Länge:string.lengthzählt UTF-16-Code-Units, nicht Bytes. Die echte Größe liefertencode(str).byteLength.- Performance: Einen
TextEncodereinmal anlegen und wiederverwenden. Bei großen oder häufigen Schreibvorgängen in bestehende Puffer istencodeInto()besser. - Kompatibilität: Wird von allen modernen Browsern unterstützt, auch in Web Workern. In Node.js ist die Klasse seit Version 11 global verfügbar, vorher über
require('util').TextEncoder. Der Internet Explorer unterstützt sie nicht.