Woher die unsichtbaren Zeichen kommen
Keines davon wird absichtlich getippt. Eine Chat-Oberfläche stellt die Antwort des Assistenten als HTML dar, und HTML bringt geschützte Leerzeichen (U+00A0) um Zahlen und nach mancher Interpunktion mit, Zero-Width-Spaces (U+200B), wo ein langes Wort umbrechen durfte, und weiche Trennstriche (U+00AD), wo es getrennt werden durfte. Markdown-Renderer fügen Variantenselektoren neben Symbole. Textverarbeitungen und PDFs fügen typografische Leerzeichen (schmal, haarfein, Halbgeviert, Geviert) und geschwungene Anführungszeichen hinzu. Windows fügt CRLF-Zeilenenden und manchmal eine Byte-Order-Mark (U+FEFF) am Dateianfang hinzu. Beim Kopieren wird all das mit ausgewählt, und das eingefügte Ergebnis sieht identisch aus, während es sich beim Vergleichen, Greppen, Hashen und Kompilieren anders verhält.
Versteckter Text und Wasserzeichen
Unicode hat einen Block von Tag-Zeichen (U+E0000–U+E007F), eines für jedes ASCII-Zeichen, die keine Schrift darstellt. Sie waren für Sprachmarkierungen gedacht und sind heute nur noch in wenigen Flaggen-Emoji gültig. Weil sie unsichtbar sind, aber Kopieren und Einfügen überleben, werden sie benutzt, um eine zweite Nachricht in einer sichtbaren zu verstecken: eine Prompt-Injection in einem Dokument, das ein KI-Assistent lesen wird, ein Fingerabdruck, der verrät, wem der Text gegeben wurde, oder ein Weg, Anweisungen an einem Filter vorbeizuschmuggeln. Derselbe Trick ist mit Folgen von Zero-Width-Zeichen (jedes ein Bit) und mit Variantenselektoren (256 Stück, also eines pro Byte) möglich. Der Bereiniger entfernt alle drei und zeigt bei Tag-Zeichen den dekodierten versteckten Text.
Was er nicht entfernen kann, ist ein statistisches Wasserzeichen, bei dem das Muster in der Wortwahl statt in irgendeinem Zeichen liegt. In diesem Fall gibt es im Text nichts zu entfernen.
Bidi-Steuerzeichen
Rechts-nach-links-Overrides und -Isolate (U+202E, U+2066–2069) ändern die Anzeigereihenfolge des Folgenden. In Quellcode ist das der „Trojan Source“-Angriff (CVE-2021-42574): ein Kommentar, der nach einer Bedingung dargestellt, aber vor ihr kompiliert wird. Compiler und GitHub warnen inzwischen davor; dieses Tool entfernt sie. Der Unicode-Inspektor zeigt jedes mit genauer Position, wenn Sie sehen statt entfernen wollen.
Warum manche Optionen standardmäßig aus sind
- Typografische Anführungszeichen und Striche sind echte Zeichen, die in Prosa hingehören. Schalten Sie das ein, wenn das Ziel Code, eine Konfigurationsdatei oder eine Shell ist, wo
“nicht"und–nicht-ist. - Doppelgänger-Buchstaben (kyrillisches
аfür lateinischesa) sind nur in sonst lateinischem Text verdächtig; der Bereiniger markiert sie in dem Fall und lässt einen kyrillischen Absatz in Ruhe. Sie zu ersetzen ändert Buchstaben, deshalb ist es eine Entscheidung, kein Standard. - Zeichen des privaten Bereichs sind meist Icons aus Icon-Schriften. Anderswo erscheinen sie als Kästchen und sind harmlos.
- Variantenselektoren werden nur nach Buchstaben und Ziffern entfernt, wo sie keine Aufgabe haben; nach Emoji und Symbolen bestimmen sie die Darstellung und bleiben erhalten.
Auf der Kommandozeile
perl -CSD -pe 's/[\x{200B}-\x{200D}\x{2060}\x{FEFF}\x{00AD}\x{E0000}-\x{E007F}]//g; s/\x{00A0}/ /g' in.txt
sed -i 's/\xC2\xA0/ /g; s/\xE2\x80\x8B//g' file.txt # NBSP und ZWSP als UTF-8-Bytes
grep -nP '[^\x00-\x7F]' file.txt # jede Nicht-ASCII-Zeile zeigen
cat -A file.txt | head # ^M für CR, M-BM- für NBSP Fragen
Entfernt das KI-Wasserzeichen?
Es entfernt jede Markierung auf Zeichenebene: Zero-Width-Zeichen, Tag-Zeichen, Variantenselektoren und ungewöhnliche Leerzeichen, also die Wege, auf denen Text unsichtbar markiert werden kann. Ein Wasserzeichen, das in der Wortwahl selbst kodiert ist, besteht nicht aus Zeichen und kann von keinem Bereiniger entfernt werden.
Warum enthält Text aus ChatGPT oder Claude versteckte Zeichen?
Meist als Nebeneffekt der Darstellung: Die Antwort wird als HTML angezeigt, und beim Kopieren von HTML kommen geschützte Leerzeichen, Zero-Width-Spaces an Umbruchstellen und typografische Interpunktion mit. Manche Tools und manche Dokumente fügen absichtlich Tag-Zeichen oder Zero-Width-Folgen ein. Die Fundliste sagt Ihnen, was Sie haben.
Macht es Emoji kaputt?
Nein. Der Zero-Width-Joiner, der Emoji-Sequenzen zusammenhält (👨👩👧), bleibt erhalten, wenn er zwischen zwei Emoji steht; Variantenselektoren nach Emoji und in Keycaps bleiben, ebenso die Tag-Zeichen, aus denen Regionalflaggen bestehen. Nur Joiner zwischen gewöhnlichen Buchstaben werden entfernt.
Wird der Text irgendwohin hochgeladen?
Nein. Die Seite läuft vollständig in Ihrem Browser; nichts wird an einen Server gesendet. Fügen Sie ein, was Sie wollen.
Was ist der Unterschied zum Unicode-Inspektor?
Der Inspektor listet jedes Zeichen mit Codepunkt, Bytes und Namen. Der Bereiniger gruppiert die Probleme, erklärt sie und erzeugt den bereinigten Text. Nehmen Sie den Inspektor zum Untersuchen, den Bereiniger zum Beheben.