Signatur
Beschreibung
String.fromCharCode() ist eine statische Methode des String-Konstruktors. Man ruft sie also immer als String.fromCharCode(...) auf, nie an einer String-Instanz. Jedes Argument ist eine UTF-16-Codeeinheit. Die Methode setzt diese Einheiten der Reihe nach zu einem neuen String zusammen.
Typische Einsatzfälle sind das Erzeugen von Zeichen aus numerischen Codes, z. B. für Buchstabenfolgen (A–Z), das Dekodieren von Byte-Arrays mit Latin-1- oder ASCII-Inhalt, einfache Verschlüsselungen wie die Caesar-Chiffre oder die Umkehrung von String.prototype.charCodeAt().
Wichtig: Die Methode arbeitet mit Codeeinheiten, nicht mit Unicode-Codepoints. Zeichen außerhalb der Basic Multilingual Plane (z. B. viele Emojis, Codepoints über 0xFFFF) brauchen zwei Codeeinheiten, ein sogenanntes Surrogatpaar. Für solche Zeichen ist String.fromCodePoint() meist die bessere Wahl.
Jedes Argument wird zuerst in eine Zahl umgewandelt und dann modulo 216 gekürzt (ToUint16). Deshalb liefern zu große Werte keinen Fehler, sondern stillschweigend ein anderes Zeichen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $...codeUnits | number | Beliebig viele UTF-16-Codeeinheiten im Bereich 0 bis 65535 (0xFFFF). Größere Werte werden abgeschnitten (value & 0xFFFF). Ohne Argumente entsteht ein leerer String. |
Rückgabewert
"".Beispiele
Einfache Zeichen aus Codes erzeugen
const wort = String.fromCharCode(72, 97, 108, 108, 111);
console.log(wort);
// Hexadezimale Schreibweise funktioniert genauso
console.log(String.fromCharCode(0x20AC)); // Euro-Zeichen
Alphabet A–Z generieren
const alphabet = Array.from({ length: 26 }, (_, i) =>
String.fromCharCode(65 + i)
).join('');
console.log(alphabet);
Caesar-Chiffre mit charCodeAt() und fromCharCode()
const caesar = (text, shift) =>
text.replace(/[a-z]/gi, (ch) => {
const base = ch <= 'Z' ? 65 : 97;
const code = ((ch.charCodeAt(0) - base + shift) % 26 + 26) % 26;
return String.fromCharCode(base + code);
});
const geheim = caesar('Hallo Welt', 3);
console.log(geheim);
console.log(caesar(geheim, -3));
Emoji über Surrogatpaar und Byte-Array dekodieren
// 😀 = U+1F600 → Surrogatpaar 0xD83D 0xDE00
const smiley = String.fromCharCode(0xD83D, 0xDE00);
console.log(smiley, smiley.length);
// Latin-1-Bytes (z. B. aus einem Uint8Array) in einen String umwandeln
const bytes = new Uint8Array([71, 114, 252, 223, 101]);
console.log(String.fromCharCode(...bytes));
// Wichtig · Fallstricke
- Keine Codepoints:
String.fromCharCode(0x1F600)liefert kein Emoji. Der Wert wird auf0xF600gekürzt. Für Codepoints über0xFFFFsolltest duString.fromCodePoint()verwenden. - Stilles Abschneiden: Ungültige oder zu große Werte werfen keinen Fehler.
NaNundundefinedwerden zu0("\u0000"),65601wird zu65("A"). - Spread bei großen Arrays:
String.fromCharCode(...hugeArray)kann bei sehr vielen Elementen (je nach Engine etwa ab 65.000 bis einigen 100.000) einenRangeErrorauslösen („Maximum call stack size exceeded“). Verarbeite solche Arrays in Blöcken oder nutzeTextDecoder. - Kein UTF-8-Decoder: Byte-für-Byte-Umwandlung funktioniert nur für ASCII oder Latin-1. Für UTF-8-Daten ist
new TextDecoder().decode(bytes)richtig. - Einzelne Surrogate (z. B. nur
0xD83D) ergeben einen ungültigen String. MitString.prototype.isWellFormed()(ES2024) lässt sich das prüfen. - Wird von allen Browsern und von Node.js unterstützt.