Skip to content
AI Watermark Remove

Find messages hidden in Unicode tag characters

Tag characters show nothing at all, but each one stands for a normal letter. A whole message can sit inside an ordinary sentence. This finds them and takes them out.

0 characters
More options
Checking is free: 5 texts and 2 images a day, no signup.

Checking your text

    What tag characters are

    Unicode reserves the range U+E0000 to U+E007F for "tag characters". U+E0020 through U+E007E mirror printable ASCII exactly: U+E0041 corresponds to "A", U+E0061 to "a", and so on.

    They were originally intended for language tagging, a use that was deprecated almost immediately. What remained is a block of codepoints that map cleanly onto ASCII and render as absolutely nothing in every mainstream font and text engine.

    That combination makes them an ideal covert channel. Any string can be converted character by character into tag characters, appended to ordinary text, then left completely invisible while remaining perfectly recoverable by anything that reads the bytes.

    ASCII smuggling and prompt injection

    This technique has a name in security work: ASCII smuggling. It matters well beyond watermarking.

    Because large language models read the raw character stream rather than the rendered glyphs, a tag-character payload that is invisible to the human reviewing a document is fully legible to the model processing it. An instruction hidden this way inside a CV, a support ticket, a web page or an email can be read and acted on by an AI agent while the person who approved the document saw nothing unusual.

    The same property makes tag characters a clean watermarking channel: an identifier can be embedded in text and survive copy, paste, reformatting without ever being visible.

    If you are reviewing documents that will be processed by an AI system, checking for this block is a genuine security control, not just a curiosity.

    The one legitimate use

    Regional and subdivision flag emoji are built from tag characters. The Scotland flag 🏴󠁧󠁢󠁳󠁣󠁴󠁿 is a waving black flag base followed by the tag characters for "gbsct" and a terminator.

    That means a tool cannot simply delete every tag character without breaking those emoji. This one parses the sequence structure: a complete, well-formed flag sequence (base, valid tag run, terminator) is recognised and kept. Tag characters appearing anywhere else, or in a malformed run, are treated as a payload and removed.

    When a payload is found, the report shows you the count and position. Because the mapping to ASCII is one-to-one, a run of tag characters in your text is almost always a readable string that somebody chose to hide there.

    Questions

    Can I read what the hidden message says?
    The mapping is direct. Subtract 0xE0000 from each codepoint and you get the ASCII character. The report shows you every tag character found and where it sits, which is enough to reconstruct the payload. Removing it does not require decoding it.
    Is this the same as a zero-width space watermark?
    Related but distinct. Zero-width watermarks usually encode a few bits through the presence or absence of a character. Tag characters encode a full byte each, so they carry far more data: a complete sentence rather than a short identifier.
    Should I be worried if I find these?
    It depends where the text came from. In a document from an unknown source, a tag-character run is deliberate and worth understanding before you feed the document to anything automated. In your own writing, it almost certainly arrived by copy and paste from somewhere that had one.
    Do normal editors show these?
    Almost none do. They have no glyph, so most editors render nothing and place the cursor as though the character were not there. A hex view will show them; so will the preview above.

    Related tools