Microblog

Microblog

Einfach

Anleitung

Du hast eine Lücke im Markt für soziale Medien für sehr, sehr kurze Beiträge entdeckt. Jetzt, wo Twitter Beiträge mit 280 Zeichen erlaubt, werden Leute, die schnelle Updates in sozialen Medien wollen, nicht mehr bedient. Du beschließt, dein eigenes soziales Netzwerk zu bauen.

Damit dein Produkt bemerkenswert wird, machst du es extrem und erlaubst nur Beiträge mit 5 oder weniger Zeichen. Beiträge mit mehr als 5 Zeichen sollten auf 5 gekürzt werden.

Damit sich deine Nutzer voll ausdrücken können, erlaubst du Emoji und anderes Unicode.

Die Aufgabe ist, eingegebene Strings auf 5 Zeichen zu kürzen.

Textkodierungen

Text, der digital gespeichert wird, muss in eine Folge von Bytes umgewandelt werden. Es gibt 3 Arten, Zeichen auf Bytes abzubilden, die üblicherweise verwendet werden.

  • ASCII kann Zeichen der englischen Sprache kodieren. Alle Zeichen sind genau 1 Byte lang.
  • UTF-8 ist eine Unicode-Textkodierung. Zeichen belegen zwischen 1 und 4 Bytes.
  • UTF-16 ist eine Unicode-Textkodierung. Zeichen sind entweder 2 oder 4 Bytes lang.

UTF-8 und UTF-16 sind beides Unicode-Kodierungen. Das heißt, sie können eine riesige Bandbreite an Zeichen darstellen, darunter:

  • Text in den meisten Sprachen und Schriften der Welt
  • historische Texte
  • Emoji

UTF-8 und UTF-16 sind beides Kodierungen mit variabler Länge. Das heißt, verschiedene Zeichen brauchen unterschiedlich viel Platz.

Betrachte den Buchstaben 'a' und das Emoji '😛'. In UTF-16 braucht der Buchstabe 2 Bytes, das Emoji aber 4 Bytes.

Der Trick bei dieser Übung ist, APIs zu verwenden, die auf Unicode-Zeichen (Codepoints) ausgelegt sind, statt auf Unicode-Codeeinheiten (codeunits).

Unicode-Codepunkte vs. Codeeinheiten

Ein „normaler“ UTF-16-codierter String lässt sich als eine Reihe von Zeichen darstellen, wobei jedes Zeichen bis zu 16 Bit lang sein kann (daher der Name UTF-16). Das heißt, es gibt maximal 2¹⁶ (zwei hoch sechzehn), also 65536 mögliche Zeichen, die sich mit 16 Bit oder 1 Codeeinheit darstellen lassen. Diese 65536 Zeichen bilden das, was als Basic Multilingual Set bekannt ist und für die gebräuchlichsten Zeichen der meisten Sprachen ausreicht.

Manche Symbole passen jedoch nicht in eine einzige Codeeinheit. Die Lösung ist, sie mit zwei Codeeinheiten darzustellen. Diese beiden UTF-16-Codeeinheiten, oft auch als Surrogatpaar bezeichnet, bilden zusammen einen Codepunkt.

Zusammenfassend gilt also für die UTF-16-Codierung:

  • Eine code unit sind 16 (oder weniger) Bits, die ein einzelnes Zeichen darstellen.
  • Ein code point besteht aus einer oder zwei Codeeinheiten, die ein einzelnes Zeichen darstellen.

Um die Verwirrung noch zu vergrößern, gibt es außerdem Graphem-Cluster, also im Grunde Folgen von Unicode-Zeichen (Codepunkten), die als eine einzige visuelle Einheit behandelt werden sollten. Zum Beispiel manche Emojis, wie dieses hier 👨‍👦.

UTF-16 in JavaScript

Die meisten eingebauten JavaScript-Methoden arbeiten mit UTF-16-codierten Strings, allerdings basieren sie dabei auf UTF-16-Codeeinheiten. Zum Beispiel trennt die Methode String.prototype.split("") einen String anhand von Codeeinheiten.

Die String iterators hingegen iterieren über Codepunkte.

Mehr dazu und Beispiele zu Unicode-Strings findest du auf MDN.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
JavaScript Exercism

Bereit, mit Microblog zu starten?

Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.