JavaScript/Objekte/String/fromCharCode

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Wie im einleitenden Artikel zum Datentyp String beschrieben, wird ein Zeichen in JavaScript als vorzeichenloser 16-bit Wert codiert, und eine Zeichenkette ist ein Array aus solchen Codes. Die verwendene Zeichencodierung ist Unicode.

Die Methode fromCharCode() dient dazu, eine Zeichenkette aus einer Folge von Codenummern zu erzeugen.


let wert = String.fromCharCode(num1[, ...[, numN]])

Die Methode kann folgende Parameter haben:

  • num1: eine kommaseparierte Liste von Zahlen aus dem Wertebereich 0 - 65535.

Sie gibt eine Zeichenkette zurück, die sich aus den Zeichen mit den angegebenen Codenummern zusammensetzt.

Beachten Sie: fromCodePoint() ist eine Methode des globalen Objekts String und muss daher auf diesem Objekt aufgerufen werden.

Unicode-Zeichen außerhalb der BMP

Mit fromCharCode lassen sind nur die Unicode-Zeichen der Basic Multilingual Plane darstellen. Die Zeichen der übrigen Ebenen müssen, um in einem JavaScript-String gespeichert werden zu können, als UTF-16 Surrogatpaare codiert werden. Idealerweise tun Sie das nicht selbst, sondern verwenden die dafür vorgesehene Methode String.fromCodePoint.

Surrogatbildung "von Hand"

Hat das gewünschte Unicode-Zeichen eine Nummer über 65535, muss es zunächst in zwei Surrogate genannte UTF-16-Zeicheneinheiten umgewandelt werden. Möchte man beispielsweise das Symbol Sternschnuppe 🌠 kodieren, das die Unicode-Nummer 127776 hat, ermittelt man die Surrogatzeichen wie folgt:

Beispiel
let codepoint = 127776 - 65536;               // Surrogate codieren nur die Ebenen ab 1
let lowPart = codePoint & 0x003ff;            // Anteil für High Surrogate
let highPart = (codePoint & 0xffc00) >> 10);  // Anteil für Low Surrogate
var shootingstar = String.fromCharCode(0xd800 + highPart, 0xdc00 + lowPart);

Im ersten Schritt wird 65536 abgezogen. Unicode hat 17 Ebenen (von 0 bis 16), was mit 20 Bits nicht darstellbar ist. Die Ebene 0 braucht aber keine Surrogate, daher kann man die Codes der Ebenen 1-16 um 65536 nach unten verschieben und kommt nun wieder mit 20 Bits aus.

Aus dem Ergebnis werden nun die beiden 10-Bit Bereiche herausgelöst, die als Surrogatzeichen verschlüsselt werden sollen. Das Beispiel verwendet den & Operator (logisches AND), mit dem sich Bitbereiche ausmaskieren lassen, sowie die Maskenwerte 0x003ff (was der Binärzeichenfolge 0000 0000 0011 1111 1111 entspricht) und 0xffc00 (das ist 1111 1111 1100 0000 0000). Die höherwertigen 10 Bits werden nach der Herausmaskierung noch um 10 Bitstellen nach rechts geschoben, dazu dient der >> Operator. Das Ergebnis sind zwei Werte im Bereich von 0 bis 1023.

Die beiden Zeichenbereiche für Surrogatpaare umfassen jeweils 1024 Zeichen. Die Surrogatzeichen für den höherwertigen Bit-Anteil beginnen bei 55296, oder 0xD800; die Surrogatzeichen für den niederwertigen Teil bei 56320 (oder 0xDC00). Die ermittelten 10-Bit Anteile werden zum Startwert dazuaddiert, und man erhält das jeweilige Surrogatzeichen. Aber, wie gesagt, String.fromCodePoint(127776) ist heute in jedem Browser verfügbar, eine manuelle Codierung ist nicht mehr notwendig.

Anwendungsbeispiel

Beispiel ansehen …
  var elem = document.getElementById('button');
  elem.addEventListener('click', zeichen);	
 
  function zeichen() {
    var test = String.fromCharCode(65, 66, 67);
	
    var ausgabe = document.getElementById('ausgabe');
    ausgabe.innerHTML = test;
  }

Im Beispiel wird mit String.fromCharCode() die Zeichenkette "ABC" erzeugt und in der Variablen test gespeichert. Die Zeichenkette kommt dadurch zustande, dass 65 die dezimale Zeichennummer für A in der Unicode-Codetabelle ist, 66 derjenige für B und 67 der für C. Im Beispiel wird das Ergebnis zur Kontrolle ausgegeben.



Zahleneingabe durch Nutzer, Verarbeitung ansehen …
function init() {
  var elem = document.getElementById('button');
  elem.addEventListener('click', umwandlung);	
}
 
function umwandlung() {
  var eingabeElement = document.getElementById('unicode'); 
  var zahl = eingabeElement.value; 
  var zeichen = String.fromCharCode(zahl);
  eingabeElement.value = '';
  ausgabe(zeichen);
}

function ausgabe(text){
  var ausgabe = document.getElementById('ausgabe');
  ausgabe.innerHTML = text;
}
 
document.addEventListener('DOMContentLoaded', init);
In diesem abgewandelten Beispiel gibt der Nutzer eine Zahl ein. Durch einen Klick auf den Button wird die Funktion umwandlung() aufgerufen. Dort wird der Wert des Eingabefeldes mit der id unicode ausgelesen und umgewandelt. Anschließend wird der Wert des Eingabefelds zurückgesetzt und das Unicodezeichen ausgegeben.

Weblinks