Alle Artikel

Leerzeichen und unsichtbare Zeichen: die versteckte Ursache seltsamer Bugs

Nach den Empfehlungen des Duden gehört zwischen eine Zahl und ihre Maßeinheit ein geschütztes Leerzeichen — „5 kg" statt „5 kg" —, ebenso nach Abkürzungen wie „z. B." oder „u. a.", damit diese Paare beim Zeilenumbruch nicht auseinandergerissen werden. Diese saubere typografische Gewohnheit ist zugleich eine der häufigsten Quellen für unsichtbare Zeichenfehler in Formulardaten.

Warum das seltsame Bugs verursacht

Genau dieses Zeichen, das im Layout eine ästhetische Aufgabe erfüllt, wird im Code zur Falle: Ein Stringvergleich gibt unerwartet „nicht gleich" zurück, obwohl der Text auf dem Bildschirm identisch aussieht. Der Grund ist oft, dass ein String ein normales Leerzeichen enthält, der andere ein geschütztes Leerzeichen, das etwa aus einem Word-Dokument mit korrekter Typografie kopiert wurde. Visuell kein Unterschied, für den Computer schon.

Trimmen

Trim entfernt Leerraumzeichen vom Anfang und Ende eines Strings und lässt den Inhalt dazwischen unverändert. Das ist eine Standardoperation zur Bereinigung von Nutzereingaben — ein versehentliches zusätzliches Leerzeichen am Anfang eines Formularfelds sollte den Vergleich oder die Validierung eines Werts nicht beeinflussen.

Leerraum zusammenfassen

Eine weitere verbreitete Operation ist das Ersetzen mehrerer aufeinanderfolgender Leerraumzeichen durch eines. Das ist nützlich bei Text, der aus einer formatierten Quelle kopiert wurde (etwa einem PDF oder einer Tabelle), wo versehentliche doppelte Leerzeichen oder Tabulatoren anstelle eines einzelnen Leerzeichens stehen können.

Wozu man das braucht

  • Diagnostizieren, warum der Vergleich zweier scheinbar identischer Strings fehlschlägt.
  • Aus einer anderen Quelle kopierten Text von überflüssigen, unsichtbaren Zeichen bereinigen — einschließlich geschützter Leerzeichen, die dort nicht hingehören.
  • Nutzereingaben normalisieren, bevor sie in einer Datenbank gespeichert werden.

Zeichen der Breite null

Neben sichtbaren Leerraumzeichen gibt es Zeichen der Breite null (zero-width space, zero-width joiner) — sie nehmen auf dem Bildschirm überhaupt keinen Platz ein, sind aber als eigenständige Zeichen im Text vorhanden. Solche Zeichen gelangen manchmal beim Kopieren von bestimmten Websites oder Messengern in den Text und können Zeichenkettenvergleiche oder Suchen unbemerkt zerstören, während sie selbst in einem Texteditor völlig unsichtbar bleiben.

Tool ausprobieren