Start · Sprachen · JavaScript · Referenz · String.fromCharCode()

String.fromCharCode()

Methode

Die statische Methode <code>String.fromCharCode()</code> erzeugt einen String aus einer Folge von UTF-16-Codeeinheiten (Zahlen von 0 bis 65535).

seit JavaScript ES1 – Baseline: alle Browser Kategorie: method-property

Signatur

String.fromCharCode(...codeUnits)

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

Typ
string
Beschreibung
Ein neuer String mit so vielen Codeeinheiten, wie Argumente übergeben wurden. Ohne Argumente ist das Ergebnis "".

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
Hallo €

Alphabet A–Z generieren

const alphabet = Array.from({ length: 26 }, (_, i) =>
  String.fromCharCode(65 + i)
).join('');

console.log(alphabet);
ABCDEFGHIJKLMNOPQRSTUVWXYZ

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));
Kdoor Zhow Hallo Welt

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));
😀 2 Grüße

// Wichtig · Fallstricke

  • Keine Codepoints: String.fromCharCode(0x1F600) liefert kein Emoji. Der Wert wird auf 0xF600 gekürzt. Für Codepoints über 0xFFFF solltest du String.fromCodePoint() verwenden.
  • Stilles Abschneiden: Ungültige oder zu große Werte werfen keinen Fehler. NaN und undefined werden zu 0 ("\u0000"), 65601 wird zu 65 ("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) einen RangeError auslösen („Maximum call stack size exceeded“). Verarbeite solche Arrays in Blöcken oder nutze TextDecoder.
  • 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. Mit String.prototype.isWellFormed() (ES2024) lässt sich das prüfen.
  • Wird von allen Browsern und von Node.js unterstützt.