# Hermoso: Invisible Character: Copy Blank Text, Find Hidden Characters

> Machine-readable twin of https://hermoso.ai/tools/invisible-character/. Generated from the shipped page. Do not edit by hand.
> Full agent guide: https://hermoso.ai/llms.txt · MCP: https://app.hermoso.ai/mcp

Invisible character

# Invisible character: copy blank text and find hidden characters

Copy a blank character such as U+3164 Hangul filler or U+2800 Braille blank in one click, keep the empty lines in a caption, and paste any text to see and strip every zero width space, joiner and odd space hiding in it.

Free tool
Runs in your browser. **Nothing you paste is sent, stored or logged**: there is no server on the other end of this page.

1. Copy an invisible character

How many to copy

**1
3
5
10

Hangul filler U+3164 · letter (Lo), default ignorableThe usual pick for a blank name or a blank line. Unicode classes it as a letter, not a space, so code that trims spaces leaves it in place. How wide it looks depends on the font.
Copy

Braille pattern blank U+2800 · symbol (So)An empty braille cell. Unicode notes that many fonts draw it as a fixed-width blank, but it does not act as a space. A common choice for blank caption lines. Screen readers may say it out loud.
Copy

Zero width space U+200B · format (Cf), default ignorableTakes up no room at all. It marks a line as not empty, or lets a long word or link wrap. Unicode lets software ignore it entirely, so it is the most likely of these to be dropped.
Copy

No-break space U+00A0 · space (Zs), whitespaceA normal-width space that keeps the words on each side on one line. It is whitespace, so code that trims spaces removes it at the start or end of a line.
Copy

Figure space U+2007 · space (Zs), whitespaceAs wide as one digit in fonts with fixed-width digits, and it does not break. Useful for lining up numbers. Trimmed at line ends like any space.
Copy

Punctuation space U+2008 · space (Zs), whitespaceAbout as wide as a full stop. Trimmed at line ends like any space.
Copy

Hangul choseong filler U+115F · letter (Lo), default ignorableAnother Korean filler letter, an alternative when U+3164 is refused. Some fonts draw it wide.
Copy

Halfwidth Hangul filler U+FFA0 · letter (Lo), default ignorableThe half-width form of U+3164, often narrower on screen.
Copy

Left-to-right mark U+200E · format (Cf), default ignorableZero width. Its real job is to fix where punctuation lands next to Arabic or Hebrew text. Screen readers can name it.
Copy

Right-to-left mark U+200F · format (Cf), default ignorableThe right-to-left partner of U+200E. It can flip the order of nearby punctuation, so test it before you use it as filler.
Copy

2. Keep blank lines in a caption

Put on each empty line

Braille blank U+2800
Hangul filler U+3164
Zero width space U+200B

Remove spaces at the end of lines

Caption with blank lines kept

Copy caption

3. Find and remove hidden characters

Keep the joiners inside emoji (so 👩‍💻 stays one emoji)
Keep line breaks
Keep joiners between letters (Persian, Hindi and other scripts that need them)

Try an example
Clear

Your text, with every hidden character marked

Cleaned text

Copy cleaned text

An invisible character is a Unicode character that takes up a place in text but shows nothing, or only blank space. The two people copy most are U+3164 Hangul filler and U+2800 Braille pattern blank: Unicode does not class either one as a space, so code that trims spaces at the start and end of a line leaves them alone. Pick one above, choose how many, and press Copy. The tool also shows how wide each one is in your own browser and how X counts it, because that differs from character to character.

## What is an invisible character?

An invisible character is any character that a font draws as nothing or as empty space. Unicode has several kinds, and the kind decides how apps treat it:

- **Spaces** such as the no-break space (U+00A0), figure space (U+2007) and punctuation space (U+2008) are in Unicode's White_Space list. Software treats them as spaces, which means they get trimmed.

- **Format characters** such as the zero width space (U+200B), the joiners and the direction marks have no width. Unicode lists them as default ignorable , which means software that does not support them is allowed to show nothing and carry on.

- **Filler letters** such as the Hangul filler (U+3164) are letters (category Lo) that happen to have no visible shape. They are also default ignorable, but they are not whitespace.

- **The Braille pattern blank** (U+2800) is a symbol (category So): a braille cell with no dots raised. It is neither whitespace nor default ignorable.

Names, categories and both property lists come from the Unicode Character Database, version 18.0 ([UnicodeData.txt](https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt), [PropList.txt](https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt) and [DerivedCoreProperties.txt](https://www.unicode.org/Public/UCD/latest/ucd/DerivedCoreProperties.txt), read on 6 October 2026). You can see each one in the Unicode code charts, for example [Braille Patterns](https://www.unicode.org/charts/PDF/U2800.pdf), [Hangul Compatibility Jamo](https://www.unicode.org/charts/PDF/U3130.pdf) and [General Punctuation](https://www.unicode.org/charts/PDF/U2000.pdf).

## Blank character, empty character and invisible text

A blank character and an empty character are the same thing as an invisible character: different words people search for. Invisible text is a run of them, so a name, message or line looks empty while still having something in it. To make it, set the count above to 3 or 10, copy U+3164 or U+2800, and paste. Whether a given app accepts a name or message made only of these depends on that app, and it can change without notice.

The test that decides most cases is trimming. Common trimming functions, such as JavaScript's trim() and Python's strip(), remove characters Unicode marks as whitespace from both ends of the text. We ran both on 6 October 2026: they removed U+00A0, U+2007 and U+2008, and left U+3164, U+2800 and U+200B in place. JavaScript's trim() also removed U+FEFF, which its [language specification](https://tc39.es/ecma262/#sec-white-space) counts as whitespace. We can't see inside each platform's code, but that is the reason the filler letter and the braille blank are the usual picks.

## Which invisible character to use on Instagram, TikTok and X

None of the three platforms says how it treats invisible characters in posts, in any of the documentation we read. Here is what each one does publish, read on 6 October 2026:

- **Instagram:** the publishing API's reference gives a 2,200-character caption limit, 30 hashtags and 20 @ tags, and says nothing about line breaks, spaces or invisible characters ([IG User Media reference](https://developers.facebook.com/docs/instagram-platform/instagram-graph-api/reference/ig-user/media)).

- **TikTok:** the Content Posting API allows a caption of up to 2,200 UTF-16 units and says hashtags and mentions are matched, or delimited, by spaces or new lines ([Direct Post reference](https://developers.tiktok.com/doc/content-posting-api-reference-direct-post)). Nothing about invisible characters.

- **X:** X publishes how it counts. Characters in four ranges count as 1, everything else as 2 ([counting characters](https://docs.x.com/fundamentals/counting-characters) and the [twitter-text v3 configuration](https://github.com/twitter/twitter-text/blob/master/config/v3.json)). So U+200B, U+00A0, U+2007 and U+2008 count as 1, while U+3164, U+2800, U+115F, U+FFA0 and even the direction marks U+200E and U+200F count as 2. Each row in the tool shows this.

In practice: for a blank line in a caption, use U+2800 or U+3164. For a gap that must not break across lines, use U+00A0. For something that takes up no room at all, use U+200B, knowing it is the easiest one for software to drop. Post a test to a private or draft account first if it matters, because the only reliable check is the platform itself.

## How to make a blank line in an Instagram caption

To make a blank line in an Instagram caption, type the caption with an empty line where you want the gap, and if the gap disappears when you post, put an invisible character such as U+2800 on that empty line. Section 2 of the tool does that for every empty line at once:

- Paste or type the caption, with empty lines where you want gaps.

- Pick the filler. Braille blank is the default.

- Leave "Remove spaces at the end of lines" on. Trailing spaces are invisible anyway, so removing them means what you see is exactly what gets pasted.

- Copy the result and paste it into the caption box.

What we can say about Instagram's own behaviour, plainly: we found nothing from Instagram on how it handles blank lines. On 6 October 2026 we read back the recent captions on our own Instagram account, all published through Instagram's API with ordinary blank lines between paragraphs, and every blank line was still there. We have not tested the caption box in the Instagram app for this page. If your blank lines survive without a filler, you don't need one; if they collapse, the filler is the fix. To check a caption's length before you post, use the [caption length checker](https://hermoso.ai/tools/social-caption-counter/), and to plan the images that go with it, the [carousel splitter](https://hermoso.ai/tools/carousel-splitter/).

## How to copy and paste a blank space

To copy a blank space, press Copy next to the character you want in section 1; the button changes to "Copied" and the character is on your clipboard. If your browser blocks clipboard access, the tool falls back to an older copy method, and if that fails too it tells you to press Ctrl+C or Cmd+C. Use the count buttons to copy several at once. A pasted invisible character is hard to spot afterwards, so paste into the detector in section 3 if you want to check what you have.

## How to remove hidden characters and zero width spaces

To remove hidden characters, paste the text into section 3: every zero width space, joiner, byte order mark, soft hyphen, direction mark, Hangul filler, braille blank, tag character, stray variation selector and unusual space is marked in place and counted by type, and the cleaned version is ready to copy. Invisible format characters are removed, unusual spaces become normal spaces, and unusual line breaks become normal ones.

Text copied from web pages, word processors, PDFs and AI chat tools can carry these characters. They cause real problems: a word that won't match in search, a hashtag that doesn't link, a line that wraps in the wrong place, or a count that is higher than the text you can see. Tag characters (U+E0020 to U+E007F) are a special case. They mirror the ASCII letters one for one (see the [Tags chart](https://www.unicode.org/charts/PDF/UE0000.pdf)), so they can spell out hidden text that you can't see but that software, including AI models, can read. When the detector finds them, it shows what they say.

Three options keep characters that belong in the text. Emoji such as 👩‍💻 and family emoji are joined with U+200D, and flags of places such as Scotland are spelled with tag characters, so "keep the joiners inside emoji" is on by default. Persian, Hindi and several other scripts use the zero width joiner and non-joiner as part of correct spelling; turn on the third option if your text is in one of them. A variation selector right after an emoji or a character it modifies is normal and isn't flagged; only stray ones are.

If you clean text in code, a regular expression covers the common cases. In JavaScript: text.replace(/[\u200B-\u200D\u2060\uFEFF\u00AD]/g, ''). That one also removes the joiners inside emoji, which is why the tool checks what is on each side first.

## Invisible characters and screen readers

Invisible to the eye doesn't always mean silent. Screen readers decide for themselves what to say for these characters. NVDA's English symbol list, for example, names U+2800 as "space", the soft hyphen as "soft hyphen", and the left-to-right and right-to-left marks by name, at different punctuation levels ([symbols.dic](https://github.com/nvaccess/nvda/blob/master/source/locale/en/symbols.dic), read on 6 October 2026). Other screen readers and languages can differ, for example by reading a braille character as a braille cell. A caption with ten fillers in a row may be read out as ten of something. Use one filler per blank line, not long runs, and never put meaning in text that only some people can perceive.

## Platforms can strip them at any time

Every platform can change how it treats these characters without announcing it, and none of them promises to keep them. A trick that works today can turn into a visible box, a removed line or a rejected name tomorrow. Treat invisible characters as formatting help, keep the post readable without them, and check a live post after you publish.

## Write the caption once, post it right on every platform

[Hermoso](https://app.hermoso.ai/tools/carousel-maker?src=tool-invisible-character) runs your marketing on autopilot: research, creative, posting, ads and analytics. It writes captions for each platform and schedules them to Instagram, TikTok, X and your other channels, checking each platform's rules when you schedule so a post that won't fit is flagged instead of quietly cut. See the [Instagram scheduler](https://hermoso.ai/instagram-scheduler/) or the [social media scheduler](https://hermoso.ai/social-media-scheduler/). It works in the web app, or from Claude, ChatGPT and Cursor.


## Frequently asked questions

### What is the invisible character to copy and paste?

The most used ones are U+3164 Hangul filler and U+2800 Braille pattern blank. Both look empty, and neither is classed as a space by Unicode, so code that trims spaces leaves them in place. If you need something with no width at all, use U+200B zero width space.

### Which invisible character works for Instagram captions?

We found no Instagram documentation on how it treats invisible characters. U+2800 Braille pattern blank and U+3164 Hangul filler are the usual picks for a blank caption line. On 6 October 2026, captions published to our own account through Instagram's API kept plain blank lines, so try without a filler first and add one if your gaps collapse.

### How do I add a line break in an Instagram caption?

Type the caption with an empty line where you want the gap. If the gap disappears when you post, paste the caption into this tool, which puts an invisible character on each empty line, then copy the result into Instagram.

### How do I remove zero width spaces from text?

Paste the text into the detector on this page. It marks every zero width space and other hidden character, counts them, and gives you a cleaned copy. In code, a regular expression like /[\u200B-\u200D\u2060\uFEFF]/g with an empty replacement removes the common ones, including the joiners inside emoji.

### Can text copied from an AI chat tool contain hidden characters?

It can, as can text copied from web pages, PDFs and word processors. Which characters appear depends on the source and changes over time, so this page doesn't guess. The detector lists exactly what is in your text, by name and code point.

### Do screen readers read invisible characters?

Some of them. NVDA’s English symbol list, for example, reads U+2800 as "space" and names the direction marks, depending on the punctuation level. Long runs of fillers can be read out one by one, so use one per blank line.

### Will invisible characters keep working?

There's no guarantee. We found no platform documentation promising to keep these characters, and a platform can strip or block them at any time. Keep the post readable without them and check it after publishing.

Hermoso runs your marketing on autopilot, from the caption to the post on every channel. Start free, 250+ earnable free credits, no card.

[Start free →](https://app.hermoso.ai/tools/carousel-maker?src=tool-invisible-character)

[See pricing](https://hermoso.ai/pricing)
