Alle Artikel

Text Reverse: warum „Text umkehren" schwieriger ist, als es klingt

„Text umkehren" klingt nach der einfachsten möglichen Operation, und für gewöhnlichen deutschen Text — auch mit Umlauten und ß — stimmt das meistens: Diese Zeichen sind jeweils ein einzelner Unicode-Codepunkt, kein Grundbuchstabe plus angehängtes Zeichen. Die Tücke liegt woanders: in der Kodierungsebene und in Inhalten, die über reines Deutsch hinausgehen.

Codepunkt gegen Byte

Deutsche Sonderzeichen wie ü oder ß belegen in UTF-8 mehr als ein Byte. Eine Umkehrung, die naiv auf der Byte-Ebene statt auf der Ebene von Unicode-Codepunkten arbeitet — etwa in einer Sprache mit rohem Byte-Array-Zugriff — zerlegt ein Mehrbyte-Zeichen in seine einzelnen Bytes und kehrt sie einzeln um. Das Ergebnis ist eine ungültige Byte-Sequenz, die beim Rendern als oder als kaputtes Zeichen erscheint, statt das Sonderzeichen einfach an die richtige Stelle zu verschieben.

Was ein Graphemcluster ist

Was ein Mensch als „ein sichtbares Zeichen" wahrnimmt, besteht in Unicode manchmal aus mehreren Codepunkten — ein Familien-Emoji (👨‍👩‍👧) etwa ist eigentlich mehrere einzelne Emojis, verbunden durch ein spezielles Verbindungszeichen mit Breite null. Eine solche Kombination nennt man Graphemcluster.

Warum eine naive Umkehrung dabei alles zerstört

Kehrt man einen String nach einzelnen Codepunkten statt nach Graphemclustern um, landet das Verbindungszeichen an der falschen Stelle, und statt eines sichtbaren Emojis entsteht eine Menge separater, unzusammenhängender Zeichen. Sobald deutscher Text mit Emojis oder anderen kombinierenden Zeichen gemischt wird, reicht die einfache Codepunkt-für-Codepunkt-Umkehrung also nicht mehr aus.

Eine korrekte Umkehrung

Eine richtige Implementierung arbeitet auf Codepunkt-Ebene (nicht auf Byte-Ebene) und teilt den String zusätzlich in Graphemcluster auf, bevor sie deren Reihenfolge umkehrt — nur so bleiben sowohl ü und ß als auch zusammengesetzte Emojis intakt.

Wozu man das braucht

  • Ein Palindrom prüfen — im Deutschen etwa „Reliefpfeiler" oder „Otto" — oder einen „gespiegelten" Texteffekt erzeugen.
  • Einen Unicode-Verarbeitungsfehler im eigenen Code demonstrieren oder diagnostizieren.
  • Unterhaltsame oder pädagogische Aufgaben, die eine korrekte Umkehrung von Text mit Emojis erfordern.
Tool ausprobieren