Invisible Character Generator – Blank Text You Can Copy
Some places refuse an empty value but happily accept a character that draws nothing. That is the whole idea behind an invisible character generator: it produces real, standards-compliant Unicode text that occupies no visible glyph. Copy one character for a blank nickname, a blank message, an empty bio line, a placeholder in a form that rejects nothing, or a spreadsheet cell that must look empty but still count as filled. The same page also works in reverse — paste any text and it reveals every hidden character it carries.
Which invisible character should you use?
There is no single "blank character" in Unicode. Different code points are blank for different reasons, and platforms treat them differently. Zero-width format characters are the most invisible but the most likely to be stripped by input sanitisers; blank-width letters such as the Hangul fillers are technically letters, so validators that require a real character accept them.
| Code point | Name | Best for |
|---|---|---|
U+200B | Zero Width Space | General-purpose blank, chat messages |
U+3164 | Hangul Filler | Blank usernames and game nicknames |
U+2060 | Word Joiner | Preventing a line break with no width |
U+00A0 | No-Break Space | Visible-width spacing that never collapses |
U+FEFF | Byte Order Mark | Legacy files — usually best removed |
How the generator works
Pick a code point, choose how many copies you want, and the tool builds the string with String.fromCodePoint(cp).repeat(count). The result appears in a dashed box so you can see the extent of something that renders as nothing, and the copy button reports exactly what landed on your clipboard. Because an invisible string is impossible to proofread visually, the tool also shows its length three ways — code points, UTF-16 code units and UTF-8 bytes — so you can confirm you copied one character rather than none or twenty.
Mixed mode draws each character at random from several code points, which helps when a platform blocks one specific character but not its neighbours. If you need the character inside code rather than on a clipboard, the format table gives you the \u200B escape, the regex form \x{200B}, the HTML entities ​ and ​, the URL form %E2%80%8B and a Base64 encoding of the UTF-8 bytes.
Detecting and cleaning hidden characters
Invisible characters are also a debugging problem. They are the usual reason two strings that look identical fail an equality test, why a trimmed input still fails validation, why a CSV import produces a column header nobody recognises, and why a copied password is rejected. Detect mode walks your text one code point at a time and reports every hidden character with its index, code point, Unicode name, class and severity, while the annotated preview replaces each one with a visible badge such as [ZWSP] or [BOM].
Clean mode then removes only the classes you tick — zero-width and format characters, the byte order mark, bidirectional controls, soft hyphens, variation selectors, unusual spaces, control characters or tag characters — and reports the byte size before and after. Turning on normalize spaces maps exotic spaces such as U+00A0, U+2007 and U+3000 to a plain U+0020 instead of deleting them, which is usually what you want when cleaning pasted prose rather than an identifier.
U+202E reverse how the text after them is displayed without changing what a program reads. This is the mechanism behind Trojan Source attacks in source code and disguised file extensions, so the scanner marks them as high severity. Treat any text that contains them with suspicion before pasting it into a terminal, a repository or an AI prompt.Zero-width steganography
Encode mode hides a short message by turning it into UTF-8 bits, mapping each 0 to U+200B and each 1 to U+200C, closing the run with U+200D and inserting it after the first word of your cover text. Decode mode reverses the mapping. It is a neat way to watermark a document or trace which copy of a message leaked, but it is obfuscation rather than encryption — the payload is trivially visible to anyone who runs a detection scan.
Practical tips
Keep runs short: a single character is enough for most blank-name use cases, and long runs are frequently truncated. If a platform rejects your blank text, try a different class of character rather than more copies. Remember that invisible characters still consume bytes — a zero-width space costs three bytes in UTF-8 — so they count against message and column length limits even though nothing is drawn. Everything on this page runs entirely in your browser, so pasting sensitive text into the scanner never sends it anywhere.