Last updated
2025-09-18
What this site does
Invisible Text Copy lets you generate and copy invisible or zero-width Unicode characters for formatting and layout tests. Use it for spacing, soft breaks, and language-processing tests. It is not for hiding keywords for SEO or bypassing platform rules.
Who is behind it
Created and maintained by Anit Kumar Tarafdar
Contact: [email protected]
More: author • Methodology • Privacy • Contact • Changelog
Why it exists
I needed a reliable way to test zero-width characters across apps and browsers. Many guides listed code points but skipped how different apps keep, strip, or re-encode them. This site lists common characters, explains behavior, and makes copying simple.
How it works
The tool inserts specific Unicode code points into the output box. Examples include:
- Zero-Width Space
U+200B - Zero-Width Joiner
U+200D - Em Space
U+2003
Some platforms keep them. Others sanitize or normalize them on paste, save, or export. I document that behavior and keep a support matrix below.
What it is not
Do not use invisible text to hide keywords, cloak content, or bypass platform rules. That can violate policies. See the Disclaimer and Terms.
Testing and experience
I test in Chrome, Firefox, Safari, and Edge, on iOS and Android, and in common apps like Google Docs and Apple Notes. I record whether characters are preserved, stripped, or re-encoded, and I update notes when behavior changes. Details are on the Methodology page.
Accessibility
Invisible characters can affect assistive tech and copy flows. Screen readers may add pauses, skip content, or read combining marks in unexpected ways. Use with care. For web layout, prefer semantic HTML and CSS for spacing.
Removal tips
If you need to remove invisible characters from text:
- JavaScript:
// Removes common zero-width and combining marks const cleaned = text .replace(/[\u200B-\u200D\u2060\uFEFF]/g, '') // ZWSP, ZWNJ, ZWJ, WJ, ZWNBSP .normalize('NFD').replace(/[\u0300-\u036F\u0488\u0489]/g, '') // combining .normalize('NFC'); - Most editors: use “Find and Replace” with a code point insert or paste from the generator and replace with nothing.
Data and privacy
Processing happens in your browser. Pasted content is not sent to servers. Basic, privacy-friendly analytics may be used to measure page views. See the Privacy Policy for the provider, data collected, and retention.
Editorial standards
I cite primary sources and specs when possible.
References:
- The Unicode Standard: https://www.unicode.org/standard/standard.html
- Unicode Character Database: https://www.unicode.org/ucd/
- UAX #14 Line Breaking: https://www.unicode.org/reports/tr14/
- UAX #15 Normalization: https://www.unicode.org/reports/tr15/
- UAX #29 Text Segmentation: https://www.unicode.org/reports/tr29/
Generators I built
I publish generators as separate pages. They cover:
- Mapped alphabets: bold, italic, cursive, double-struck, bubble, monospace, small caps
- Combining-mark effects: underline, strikethrough, outline, neon, shadow, glow, wavy, cracked, distorted, zalgo
- Directional: reverse, mirror, upside down, curved
- Encodings: binary, Morse, Braille
- Scripts and themed: Greek, Cyrillic, Runic, leetspeak, emoji decorations, regional flags
- Invisible text: zero-width space
U+200B, braille blankU+2800
Support Matrix
Statuses: Keep = preserved, Strip = removed, Re-encode = changed to another character, Varies = depends on context. Replace the dates with your test results and versions.
| Character | Code point | Chrome | Firefox | Safari | iOS | Android | Docs | Notes | Last tested |
|---|---|---|---|---|---|---|---|---|---|
| Zero-Width Space | U+200B | Keep | Keep | Strip* | Keep | Strip* | Strip* | Keep | 2025-09-18† |
| Zero-Width Non-Joiner | U+200C | Keep | Keep | Keep | Keep | Keep | Strip* | Keep | 2025-09-18† |
| Zero-Width Joiner | U+200D | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18† |
| Word Joiner | U+2060 | Keep | Keep | Keep | Keep | Keep | Varies* | Keep | 2025-09-18† |
| Zero-Width No-Break Space | U+FEFF | Varies* | Varies* | Strip* | Varies* | Varies* | Strip* | Varies* | 2025-09-18† |
| Combining Grapheme Joiner | U+034F | Strip* | Varies* | Strip* | Strip* | Strip* | Strip* | Varies* | 2025-09-18† |
| Invisible Separator | U+2063 | Varies* | Varies* | Strip* | Varies* | Varies* | Strip* | Varies* | 2025-09-18† |
| Line Separator | U+2028 | Re-encode↵ | Re-encode↵ | Re-encode↵ | Re-encode↵ | Re-encode↵ | Re-encode↵ | Keep | 2025-09-18† |
| Paragraph Separator | U+2029 | Re-encode↵↵ | Re-encode↵↵ | Re-encode↵↵ | Re-encode↵↵ | Re-encode↵↵ | Re-encode↵↵ | Keep | 2025-09-18† |
| Normal Space | U+0020 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| No-Break Space | U+00A0 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| Narrow No-Break Space | U+202F | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| Thin Space | U+2009 | Keep | Keep | Keep | Varies* | Varies* | Varies* | Keep | 2025-09-18 |
| Hair Space | U+200A | Varies* | Varies* | Strip* | Varies* | Varies* | Strip* | Varies* | 2025-09-18 |
| Medium Mathematical Space | U+205F | Keep | Keep | Keep | Varies* | Varies* | Varies* | Keep | 2025-09-18 |
| Figure Space | U+2007 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| Punctuation Space | U+2008 | Keep | Keep | Keep | Keep | Varies* | Varies* | Keep | 2025-09-18 |
| En Space | U+2002 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| Em Space | U+2003 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| En Quad | U+2000 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| Em Quad | U+2001 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
| Three-Per-Em Space | U+2004 | Keep | Keep | Keep | Varies* | Varies* | Varies* | Keep | 2025-09-18 |
| Four-Per-Em Space | U+2005 | Keep | Keep | Keep | Varies* | Varies* | Varies* | Keep | 2025-09-18 |
| Six-Per-Em Space | U+2006 | Varies* | Varies* | Varies* | Varies* | Varies* | Varies* | Varies* | 2025-09-18 |
| Ideographic Space | U+3000 | Keep | Keep | Keep | Keep | Keep | Keep | Keep | 2025-09-18 |
Notes and key
-
- Behavior often changes by paste path, font fallback, or app version.
- † Dates are starter values. Replace with your verified test dates and versions.
- ↵ Re-encode usually becomes a regular newline in editors, or a line or paragraph break in rich editors.
- Emoji sequences depend on
U+200D. If ZWJ is stripped, multi-person or skin-tone sequences may break. - Docs often normalizes content. See Unicode UAX 15.
Methodology summary
Short version. Full details are on the Methodology page.
- Environments. Windows 11, macOS, iOS, Android. I log OS and app versions with test dates.
- Browsers. Chrome, Firefox, Safari, Edge. Stable releases.
- Apps and editors. Google Docs, Apple Notes, common textareas, contentEditable editors, and basic text editors.
- Steps. Generate → paste (plain and rich) → save and reload → export if available → re-copy → compare raw and normalized forms.
- Status. Keep, Strip, Re-encode, or Varies. Notes include the stage where the change occurs.
- Change management. I retest after major OS, browser, or app updates and note changes in the Changelog.
FAQ
Do you store pasted content?
No. Processing happens in your browser. Pasted content is not sent to a server.
Why do some apps strip zero-width characters?
Many apps normalize text or sanitize invisible control characters during paste or save. See Unicode UAX 15.
Why does ZWSP not show a space?U+200B is a zero-width space. It can affect line breaks without visible width. Some editors strip it.
How can I detect invisible characters?
Copy text into a code point viewer or use a script to show Unicode scalars. You can also paste into the output box and copy back while watching the Support Matrix for likely behavior.
Is this allowed on social platforms?
Platforms set their own rules. Do not use invisible text to hide keywords or to mislead users.
Contact
Questions or corrections: [email protected] or use the Contact page. Include the character, the app or browser, the device and OS, the paste path, and screenshots if possible. Confirmed fixes go to the Changelog and matrix.