Demonstrate text steganography
Carry a short secret inside an ordinary sentence to understand how invisible Unicode characters encode information.
Guide
Zero-width steganography first encodes the secret text as UTF-8 bytes, then maps it bit by bit onto invisible characters: a 0 becomes U+200B, a 1 becomes U+200C, and U+200D delimits the two ends. When the carrier is not empty, the whole zero-width payload is inserted after the first Unicode code point; the decoding tab can also strip common zero-width characters out of visible text.
Updated 2026-09-102 min read
| Input | Output | Notes |
|---|---|---|
Carrier Hello + secret A |
An 8-bit zero-width payload inserted after H |
A is a single UTF-8 byte |
| Text containing U+200B/U+200C | The decoded UTF-8 secret | A trailing group shorter than 8 bits is ignored |
| Text containing U+FEFF | Removed from the cleaned result | Cleaning covers more than the three encoded characters |
Carry a short secret inside an ordinary sentence to understand how invisible Unicode characters encode information.
When text copied from a web page or a document starts comparing as different, strip the common zero-width characters before processing it.
No. The encoding rule is public and decodes directly; there is no key and no confidentiality guarantee.
An intermediate platform may normalise or filter U+200B, U+200C or U+200D, which corrupts the bit stream.
Carriers, secrets, encoding and decoding all happen in browser memory only; this tool neither uploads nor persists that text.
Updated 2026-09-10
Hide a secret message in ordinary text using zero-width characters, or reveal and strip hidden content
Any ordinary text can serve as cover
Generated after you enter a secret message
Copy the text above and send it to the recipient; it looks no different from ordinary text, and they can restore the message with this tool's "Reveal a message" mode.
The secret is first converted to UTF-8 binary and then encoded with zero-width characters: 0 → U+200B (zero-width space), 1 → U+200C (zero-width non-joiner), bounded by U+200D (zero-width joiner) at each end, and inserted after the first character of the carrier text. These characters are zero width and completely invisible.
Common uses: passing covert messages, copyright watermarks (to trace where a document leaked from), copy-protection checks and more. Note: some input fields and editors strip zero-width characters, so if the message cannot be decoded after pasting, transfer it as a file instead.