JavaScript/Objekte/String/charCodeAt

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Methode String.charCodeAt() liefert die Nummer der UTF-16-Zeicheneinheit zurück, die in einer Zeichenkette an einer bestimmten Position steht.

String.charCodeAt(index)

Erwartet folgende Parameter:

  • index: die gewünschte Position

Anwendungsbeispiel

Beispiel ansehen …
function init() {
  var elem = document.getElementById('button');
  elem.addEventListener('click', nummerAusgeben);	
}

function nummerAusgeben() {
    var name = 'Hans';
    var zeichen = name.charAt(1);
    var unicode = name.charCodeAt(1);
    var text = '2. Zeichen: <span>' + zeichen + '</span><br> Unicode-Nr: <span>' + unicode + '</span>';
	ausgabe(text);
}
  
function ausgabe(text){
  var ausgabe = document.getElementById('ausgabe');
  ausgabe.innerHTML = text;
}

Im Beispiel wird eine Variable name mit dem Wert Hans belegt. Anschließend wird ausgegeben, welches Zeichen und welche Zeichennummer das zweite Zeichen dieser Variablen hat, also das "a" in "Hans". Dazu wird String.charCodeAt als Parameter 1 übergeben, denn in JavaScript hat das erste Zeichen einer Zeichenkette immer die Position 0, das zweite die Position 1 usw.

Als Ergebnis wird 97 angezeigt. Dies ist die Zeichennummer des kleinen "a" in UTF-16. Da die Zahl nicht zwischen 55296 und 57343 liegt, handelt es sich gleichzeitig um die Unicode-Nummer.

Bei seltenen Zeichen (Unicode-Nummer von mehr als 65535) muss hingegen beachtet werden, dass diese aus zwei UTF-16-Zeicheneinheiten bestehen. Die erste davon (High Surrogate) hat eine Nummer zwischen 55296 und 56319, die zweite (Low Surrogate) zwischen 56320 und 57343. Das Symbol Sternschnuppe "🌠" hat beispielsweise die Unicode-Nummer 127776. Ein String, der nur aus diesem einen Zeichen besteht, hat die Länge (length) 2. Für diesen String gibt die Funktion an Position 0 die Zahl 55356 und an Position 1 die Zahl 57120 zurück. Macht man die UTF-16-Codierung rückgängig, so erhält man die Unicode-Nummer:

Beispiel
 ((55356 % 1024) * 1024) + (57120 % 1024) + 65536 = 127776
alle Klammern sind optional und nur zur Verdeutlichung enthalten

Weblinks