Signatur
Beschreibung
Die Eigenschaft encoding eines TextDecoder-Objekts gibt an, welche Zeichencodierung der Decoder tatsächlich verwendet. Der Wert wird beim Aufruf des Konstruktors new TextDecoder(label) festgelegt und lässt sich danach nicht mehr ändern.
Wichtig: Zurückgegeben wird nicht das übergebene Label, sondern der kanonische Name laut WHATWG Encoding Standard, immer in Kleinbuchstaben. Aus Aliasen wie "UTF8", "unicode-1-1-utf-8" oder "latin1" werden also "utf-8" bzw. "windows-1252". Deshalb eignet sich die Eigenschaft gut, um Labels aus Benutzereingaben, HTTP-Headern oder Dateimetadaten zu normalisieren und zu prüfen.
Typische Einsatzfälle sind Logging und Fehlersuche (welche Codierung wird wirklich benutzt?), das Vergleichen von Codierungen ohne eigene Alias-Tabellen und das Durchreichen eines sauberen Codierungsnamens an andere Programmteile.
Rückgabewert
"utf-8", "utf-16le", "windows-1252" oder "shift_jis".Beispiele
Standard-Codierung abfragen
const decoder = new TextDecoder();
console.log(decoder.encoding);
const utf16 = new TextDecoder('UTF-16LE');
console.log(utf16.encoding);
Aliase werden auf den kanonischen Namen normalisiert
const labels = ['UTF8', 'unicode-1-1-utf-8', 'latin1', 'ISO-8859-1', 'ascii', 'sjis'];
for (const label of labels) {
console.log(`${label} -> ${new TextDecoder(label).encoding}`);
}
Codierung aus dem Content-Type-Header sicher bestimmen
const createDecoder = (contentType) => {
const match = /charset=([^;]+)/i.exec(contentType ?? '');
const label = match ? match[1].trim().replace(/"/g, '') : 'utf-8';
try {
return new TextDecoder(label);
} catch {
// Unbekanntes Label -> RangeError, auf UTF-8 zurückfallen
console.warn(`Unbekannte Codierung "${label}", verwende UTF-8`);
return new TextDecoder('utf-8');
}
};
const loadText = async (url) => {
const response = await fetch(url);
const decoder = createDecoder(response.headers.get('Content-Type'));
console.log('Dekodiere mit:', decoder.encoding);
return decoder.decode(await response.arrayBuffer());
};
console.log(createDecoder('text/html; charset="ISO-8859-15"').encoding);
console.log(createDecoder('text/plain; charset=foo').encoding);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
decoder.encoding = 'utf-16le'wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einenTypeErroraus. Für eine andere Codierung muss ein neuerTextDecodererzeugt werden. - Nicht mit dem Label vergleichen:
new TextDecoder('UTF-8').encoding === 'UTF-8'istfalse, weil der Wert immer kleingeschrieben und kanonisch ist. - Latin-1-Falle:
"iso-8859-1","latin1"und"ascii"werden laut WHATWG-Standard auf"windows-1252"abgebildet. Das ist so gewollt und entspricht dem Browserverhalten bei HTML. - Unbekannte Labels sowie
"replacement"führen schon im Konstruktor zu einemRangeError. Die Eigenschaft selbst wirft nie einen Fehler. TextEncoder.encodingist dagegen immer"utf-8".- Kompatibilität: Wird von allen modernen Browsern unterstützt, auch in Web Workers. In Node.js ist
TextDecoderseit Version 11 global verfügbar. Ohne volle ICU-Daten beherrscht Node.js nur eine eingeschränkte Auswahl an Codierungen.