Skip to content
Text Repeater
Reference

Invisible and Blank Text Characters, Explained Properly

Hangul filler, zero-width space, Braille blank and figure space: how each invisible character renders, where each one fails, and why platforms strip them.

The Text Repeater Team7 min read

"Invisible text" is not one thing. It is a handful of unrelated Unicode characters that happen to render as nothing, each with different properties, and those differences decide whether your blank message posts, gets stripped, or shows up as an empty rectangle. Knowing which is which saves a lot of guessing.

Why blank text is harder than it looks

Most platforms trim whitespace from the start and end of input, then reject the result if it is empty. A plain space will not survive that. So people reach for characters that look blank but are not classified as whitespace, which slips past the trim.

That is the whole trick, and it explains why some characters work in some places and not others. It depends entirely on what each platform considers whitespace, whether it normalises Unicode, and whether it has a filter list.

The four that matter

U+3164 Hangul Filler

The Hangul Filler is a Korean typographic character representing an empty syllable block. Critically, Unicode classifies it as a letter, not as whitespace. Trim functions leave it alone, "is this empty?" checks say no, and it renders with roughly the width of a space in most fonts.

That combination — invisible, letter-classified, has width — is why it became the go-to blank character for usernames and blank messages. It is also why platforms that care have specifically blocked it.

Where it fails: fonts without Hangul coverage may render it as a fallback box. Some platforms now normalise or reject it by name in username fields. Screen readers may announce nothing, or may announce a Hangul character, depending on the engine.

U+200B Zero Width Space

The zero-width space is exactly what its name says: a character with no width at all. Its real job is typographic — it marks a place where a line may break without inserting a visible space, which matters for languages that do not use spaces between words, and for breaking long URLs.

Because it has zero width, it is invisible in the sense of occupying nothing. It will not push text apart or create a blank-looking line on its own.

Where it fails: it is the most heavily stripped invisible character on the web, because it also has a long history of being used to break up filtered words. Many platforms remove it on input. It also causes subtle bugs when it survives — a copied string that looks identical to another but fails an equality check, a search that returns nothing, a phone number that will not validate. If you have ever copied text from a rendered web page and had it mysteriously fail a form, a zero-width space is a likely culprit.

U+2800 Braille Pattern Blank

This is the braille cell with no dots raised. It is a genuine printable character with a genuine advance width, and it is not whitespace by any classification. In most fonts it renders as a blank of consistent width, which makes it the most reliable option for actual visual spacing.

It is widely used for ASCII-art-style layout in chat clients and for padding in game interfaces, because you can build a grid out of blank and dotted braille cells that survives copy-paste.

Where it fails: accessibility, badly. A screen reader that supports braille patterns may announce it as a braille character or read it out in a way that makes the surrounding text incomprehensible. A run of two hundred of them is a run of two hundred announced characters. It also renders inconsistently in fonts with partial braille coverage, and its width is not guaranteed to match a space.

U+2007 Figure Space

The figure space is a space with the same width as a digit in the current font. It exists so numbers can be aligned in tables — you can pad 42 to line up with 1042 and the columns stay straight in a proportional font.

Unlike the previous three, U+2007 is whitespace. It sits in Unicode's space separator category. That makes it well-behaved and semantically honest, and it also means trim functions and empty-checks will treat it as blank.

Where it fails: anywhere the trick depends on not being whitespace. It will be trimmed from the edges of a field and it will not make an "empty" message post. Use it for what it is designed for — numeric alignment and consistent-width padding inside a line of text — not as a blank-message workaround.

Quick comparison

Character Code point Unicode category Has width Survives trim Best for
Hangul Filler U+3164 Letter (Lo) Yes, ~space Usually Blank-looking names and messages
Zero Width Space U+200B Format (Cf) No Often stripped Line-break hints, not spacing
Braille Blank U+2800 Other symbol (So) Yes, fixed Usually Visual layout and padding
Figure Space U+2007 Space separator (Zs) Yes, digit width No Aligning numbers in text

Worth knowing about but rarely the right choice: U+00A0 no-break space (visible-width space that will not wrap — genuinely useful, not invisible), U+FEFF zero-width no-break space (originally the byte order mark; using it as text causes encoding headaches), and U+180E Mongolian vowel separator, which was reclassified years ago and no longer behaves as many old guides claim.

You can generate any of these from the blank text generator, which lets you pick the character and the count rather than leaving you to copy an unlabelled blob from a forum post.

Legitimate uses

There are real ones, and they are worth separating from the rest.

Spacing in bios and profiles. Many profile fields collapse consecutive spaces and strip line breaks. A Hangul filler or braille blank between paragraphs gives you visual separation the field otherwise refuses to render. Check the result with the character counter first, because invisible characters still count against the limit.

Blank messages. Sending an empty-looking message to create space in a chat, mark a break in a conversation, or reserve a slot in a pinned message. Harmless in a chat where it is welcome, tedious in a group where it is not.

Layout in games and chat clients. Aligning columns of text in a fixed-width context, building simple tables in a client with no table support, or padding a label. Braille blank is the workhorse here.

Typography and code. Zero-width space to allow a break inside a long identifier or URL. Figure space to align numbers in a plain-text report. No-break space to keep "10 kg" from splitting across lines. These are the uses the characters were designed for, and they are entirely uncontroversial.

Testing. If you build software that handles user text, invisible characters belong in your test inputs. Paste a name with a zero-width space in the middle and see whether your deduplication, search, and comparison still behave.

Why platforms strip them

Not out of hostility. Invisible characters break things that platforms need to work:

  • Search and matching. A username with a hidden character is not findable by typing the visible name. Two entries that look identical fail to deduplicate.
  • Moderation. Filters match on strings. Splitting a word with zero-width spaces defeats naive matching, so platforms normalise input before filtering.
  • Impersonation. If invisible characters are allowed in display names, you can create an account that looks pixel-identical to someone else's.
  • Accessibility. Screen readers have to do something with these characters, and what they do is rarely good. A bio padded with two hundred blanks is a bio that takes a long time to read aloud for no benefit.
  • Data hygiene. Invisible characters propagate through copy-paste into spreadsheets, databases, and CSVs, where they cause failures that are genuinely hard to diagnose.

Stripping is usually done by Unicode normalisation plus a filter list. This is why a character that worked last year stops working this year: the filter list grew.

The honest part

Using invisible characters to break up words so they get past a moderation filter, to evade a mute or a ban, or to make a message look like it came from someone else violates the rules of essentially every major platform. It is treated as evasion, and evasion is usually punished more harshly than whatever was being evaded in the first place.

It also does not work reliably any more. Normalisation before filtering is standard, and repeated attempts are themselves a signal. The realistic outcome is a restricted account rather than a clever workaround.

Spacing out a bio, sending a blank message to a friend, and aligning text in a game are fine. Dodging a filter is not, and the tools here are not built for it. If you are looking for visual emphasis rather than concealment, the fancy text generator gives you styled characters that are visible and honest, and the full tool list covers the rest.

Key takeaways

  • The four characters behave differently: U+3164 is a letter, U+200B has no width, U+2800 is a symbol with fixed width, and U+2007 is real whitespace.
  • Trim behaviour is what decides success — non-whitespace characters survive "is this empty?" checks and whitespace ones do not.
  • Legitimate uses are real: bio spacing, chat layout, numeric alignment, line-break hints, and testing your own software.
  • Platforms strip these characters to protect search, moderation, and accessibility, and using them to evade filters breaks the rules of nearly every service.
  • unicode
  • invisible text
  • blank characters
  • accessibility

Keep reading