UNICODE U+200B

Zero Width Space (U+200B): Copy, Type, Find and Remove It

Copy it, type it, spot it and delete it. A practical guide to U+200B and its zero width siblings for developers, writers and anyone who just wants a blank message.

Scan my text free Updated

Short answer

A zero width space is the invisible Unicode character U+200B (ZWSP). It has no width and no glyph, and it tells software where a line may break. Copy it with the button below, write it as ​ in HTML or "\u200B" in code, and remove it with the regex [\u200B-\u200D\u2060\uFEFF].

THE BASICS

What is a zero width space?

One code point, three bytes, zero pixels.

U+200B ZERO WIDTH SPACE sits in the General Punctuation block of Unicode. The official code chart lists it as "commonly abbreviated ZWSP" and describes its job in one line, quoted below. Fonts draw nothing for it, so you cannot see it, select it on its own or tell it apart from no character at all.

Its real purpose is line breaking. Put a ZWSP inside a long word or URL and the browser may wrap the line there without adding a hyphen. Languages written without spaces between words, such as Thai, Khmer and Myanmar, use it to mark word boundaries for line breaking.

The trouble starts when it lands where nobody wanted it. A ZWSP copied out of a web page, a CMS or a rich text editor travels into code, spreadsheets and logins, and the software on the other end treats it as a real character. That is why searches for this character come from two camps: people who want one, and people trying to get rid of one.

This page covers the zero width family in depth. If you need to check text for every kind of invisible code point, use the invisible character detector. For how hidden characters differ from AI watermarks, see watermark vs hidden characters.

This character is intended for invisible word separation and for line break control; it has no width, but its presence between two characters does not prevent increased letter spacing in justification.
Source: Unicode code chart, U+200B ZERO WIDTH SPACE

U+200B

code point, decimal 8203

Unicode

3 bytes

in UTF-8: E2 80 8B

Wikipedia

1

JavaScript .length for one ZWSP, though you see nothing

Tested in Node 20

Cf

Unicode category: format character, not whitespace

Unicode

COPY AND PASTE

Zero width space copy and paste

Need the character itself? Copy it here. Each button copies one character and nothing else.

COPY PAD

Copy a zero width character in one click

Each button puts exactly one invisible character on your clipboard. Paste it into the test field to prove it is there.

U+200B · ZWSPZero width space

Allows a line break with no visible gap.

UTF-8
E2808B
HTML
​ ​
JS
"\u200B"
Python
"\u200b"
U+200C · ZWNJZero width non-joiner

Stops two letters from joining.

UTF-8
E2808C
HTML
‌ ‌
JS
"\u200C"
Python
"\u200c"
U+200D · ZWJZero width joiner

Glues emoji and letters together.

UTF-8
E2808D
HTML
‍ ‍
JS
"\u200D"
Python
"\u200d"
U+2060 · WJWord joiner

Blocks a line break with no visible gap.

UTF-8
E281A0
HTML
⁠ ⁠
JS
"\u2060"
Python
"\u2060"

No zero width characters in the field yet.

Bytes come from the browser's own UTF-8 encoder. Entities are the HTML5 named and numeric references for each code point.

Will it survive the paste?

Plain text fields, code editors, HTML and most chat apps keep it. Some sign-up forms, usernames and search boxes strip invisible characters or reject them, and a few rich text editors insert their own. Paste into the test field above or into the invisible character detector to see what arrived.

THE FAMILY

Zero width characters compared: ZWSP, ZWNJ, ZWJ, word joiner and BOM

Five invisible characters people confuse with each other. They look identical (they look like nothing) but do opposite jobs.

Zero width characters at a glance
CharacterCode pointUTF-8 bytesHTMLWhat it does
Zero width space (ZWSP)U+200BE2 80 8B​ or ​Allows a line break, no visible gap
Zero width non-joiner (ZWNJ)U+200CE2 80 8C‌ or ‌Stops neighbors from joining (Persian, Hindi, ligatures)
Zero width joiner (ZWJ)U+200DE2 80 8D‍ or ‍Joins neighbors (emoji sequences, Indic conjuncts)
Word joiner (WJ)U+2060E2 81 A0⁠ or ⁠Forbids a line break, no visible gap
Byte order mark (BOM)U+FEFFEF BB BFMarks byte order at the start of a file

Swipe to compare →

Zero width space (ZWSP)

Code point
U+200B
UTF-8 bytes
E2 80 8B
HTML
​ or ​
What it does
Allows a line break, no visible gap

Zero width non-joiner (ZWNJ)

Code point
U+200C
UTF-8 bytes
E2 80 8C
HTML
‌ or ‌
What it does
Stops neighbors from joining (Persian, Hindi, ligatures)

Zero width joiner (ZWJ)

Code point
U+200D
UTF-8 bytes
E2 80 8D
HTML
‍ or ‍
What it does
Joins neighbors (emoji sequences, Indic conjuncts)

Word joiner (WJ)

Code point
U+2060
UTF-8 bytes
E2 81 A0
HTML
⁠ or ⁠
What it does
Forbids a line break, no visible gap

Byte order mark (BOM)

Code point
U+FEFF
UTF-8 bytes
EF BB BF
HTML

What it does
Marks byte order at the start of a file

Bytes checked with a UTF-8 encoder. U+FEFF used to double as a zero width no-break space; Unicode now points to the word joiner U+2060 for that job.

Do not strip all five blindly

ZWSP, word joiner and a BOM in the middle of text are almost always junk. ZWJ and ZWNJ are often load-bearing: remove them and the family emoji splits into three faces, and Persian words like می‌خواهم lose the break between prefix and verb. Scope your cleanup to the text you have.

FOUND ONE IN YOUR TEXT?

Paste it once, see every zero width character

ClaudeClean flags zero width spaces, joiners, word joiners, BOMs, no-break spaces and soft hyphens, then removes them in your browser. Nothing is uploaded for the scan.

  • 300 rewrite credits a month
  • 20,000 characters per request
  • .txt, .docx and .pdf files

HOW TO TYPE IT

How to type a zero width space on Windows, Mac, Linux and in code

Every method below was checked against documentation or run locally. The famous Alt code mostly does not work.

Ways to enter U+200B
WhereHowNotes
Microsoft Word, OutlookOur pickType 200B, press Alt+XConverts the hex code before the cursor. Press Alt+X again to turn it back into a code.
Windows, other appsCopy it from this pageAlt+8203 on the numpad gives a control character in Notepad and browsers, not a ZWSP.
Windows, hex numpadAlt, numpad +, then 200BOnly after setting EnableHexNumpad to 1 in the registry and signing in again.
macOSUnicode Hex Input, then Option+200BAdd Unicode Hex Input under Keyboard > Input Sources first. Or run printf '\u200b' | pbcopy.
Linux (GTK, IBus)Ctrl+Shift+U, 200b, SpaceWorks in most GTK and IBus apps; some terminals and Qt apps differ.
HTML&#8203; or <wbr><wbr> gives the same break opportunity without a character in the text.
JavaScript, JSON"\u200B"String.fromCodePoint(0x200B) works too.
Python"\u200b"Or chr(0x200B). print(repr(s)) shows it as \u200b.
CSS contentcontent: "\200B"CSS escapes take the hex code with no u.
URL%E2%80%8BThe UTF-8 bytes, percent-encoded.

Swipe to compare →

Microsoft Word, Outlook

Our pick
How
Type 200B, press Alt+X
Notes
Converts the hex code before the cursor. Press Alt+X again to turn it back into a code.

Windows, other apps

How
Copy it from this page
Notes
Alt+8203 on the numpad gives a control character in Notepad and browsers, not a ZWSP.

Windows, hex numpad

How
Alt, numpad +, then 200B
Notes
Only after setting EnableHexNumpad to 1 in the registry and signing in again.

macOS

How
Unicode Hex Input, then Option+200B
Notes
Add Unicode Hex Input under Keyboard > Input Sources first. Or run printf '\u200b' | pbcopy.

Linux (GTK, IBus)

How
Ctrl+Shift+U, 200b, Space
Notes
Works in most GTK and IBus apps; some terminals and Qt apps differ.

HTML

How
&#8203; or <wbr>
Notes
<wbr> gives the same break opportunity without a character in the text.

JavaScript, JSON

How
"\u200B"
Notes
String.fromCodePoint(0x200B) works too.

Python

How
"\u200b"
Notes
Or chr(0x200B). print(repr(s)) shows it as \u200b.

CSS content

How
content: "\200B"
Notes
CSS escapes take the hex code with no u.

URL

How
%E2%80%8B
Notes
The UTF-8 bytes, percent-encoded.

Want one on the clipboard right now? The copy pad above is the fastest route on any system.

// Browser console (Chrome, Edge, Firefox)
copy("\u200B")      // ZWSP on the clipboard

// JavaScript
const zwsp = "\u200B";
zwsp.length          // 1
zwsp.trim().length   // still 1
# macOS Terminal
printf '\u200b' | pbcopy

# Python
zwsp = "\u200b"
print(repr("a" + zwsp + "b"))   # 'a\u200bb'
print(zwsp.isspace())           # False

Why does Alt+8203 fail? Windows only treats Alt codes above 255 as Unicode in rich edit controls such as WordPad. Most other apps take the number modulo 256, so 8203 becomes 11, a vertical tab. If a video tells you to hold Alt and type 8203, test it in your app before trusting it.

WHAT IT IS FOR

Legit uses of zero width characters

Before you delete every one you find, know where they belong.

THAI, KHMER, MYANMAR

Word breaks in scripts without spaces

These scripts run words together. A ZWSP marks where a line can wrap so text does not overflow or break mid-word, per the Wikipedia entry.

LONG URLS AND CODE

Wrapping long strings

Long URLs, file paths and compound words can wrap at a ZWSP. In HTML, prefer <wbr>, which MDN says behaves like U+200B but never ends up in copied text.

PERSIAN, HINDI

ZWNJ keeps letters apart

Persian uses ZWNJ for prefixes, suffixes and compounds: می‌خواهم ("I want") needs it between the prefix and the verb. In Devanagari, ZWNJ and ZWJ change how conjuncts render, as in क्‌ष vs क्ष.

EMOJI

ZWJ glues emoji together

Family, profession and flag emoji are several emoji joined by U+200D. The pirate flag is a black flag, ZWJ and skull and crossbones. Unicode keeps the full list of ZWJ sequences.

SOCIAL POSTS

Stopping auto-links and mentions

Chris Coyier used a ZWSP after the @ in @media so a post would not link to a user, and warned it breaks the code if someone copies it, in CSS-Tricks.

FINGERPRINTING

Tagging copies of a document

Zero width characters can encode a hidden ID in each copy of a text. It is easy to defeat: any hex view reveals them and one regex removes them all.

ZWJ EMOJI ASSEMBLER

How the family emoji is glued together

Step through the five code points. Then remove the joiners and watch one emoji fall apart into three.

Press play or next
👨U+1F468ZWJU+200D👩U+1F469ZWJU+200D👧U+1F467

0

Code points

0

JS .length

0

UTF-8 bytes

0

Graphemes

The finished emoji is 5 code points, 8 UTF-16 units and 18 UTF-8 bytes, yet a reader sees one picture. That gap is why character limits, cursors and naive string slicing go wrong around emoji.

Sequence from the Unicode emoji ZWJ list: U+1F468 U+200D U+1F469 U+200D U+1F467. Counts are computed by your browser; the segmenter follows the Unicode grapheme rules, which treat emoji joined by ZWJ as one cluster even when a font cannot draw the combination.

FOR DEVELOPERS

Zero width space bugs: JSON, string compares, URLs and trim()

The character is invisible in your editor, your logs and your diff, and most whitespace functions skip it. Here is what breaks and how to see it.

LIVE REVEAL

Paste anything and see the zero width characters

Runs only in your browser. Orange pills are spacers you usually want gone; green pills are joiners that real text and emoji depend on.

X-ray view

Meet me at the frontZWSP desk at 9. https://api.example.com/v1ZWSP/orders {ZWSP"user": "dana", "team": "opsWJ"} Family: 👨ZWJ👩ZWJ👧

6

zero width found

118

JS .length

112

length without them

ZWSP × 3WJ × 1ZWJ × 2

The sample hides a ZWSP inside a sentence, a URL and a JSON key, a word joiner inside a value, and two legitimate ZWJs inside the family emoji.

JSON.parse fails

JSON.parse('{\u200B"a":1}')
// SyntaxError: Expected property
// name or '}' in JSON at position 1

Position 1 points at a character you cannot see. Node 20 error text shown.

String compare is false

"admin" === "admin\u200B"  // false
"user" == "us\u200Ber"     // false

Logins, role checks, dictionary keys and database lookups miss with no visible reason.

URL returns 404

/v1%E2%80%8B/orders
// the ZWSP is sent as three
// percent-encoded bytes

One developer traced a failing API call to five ZWSPs pasted into the URL.

TESTED, NOT ASSUMED

Your trim() does not see it

A check means the function catches that character. Almost every cell is an X, which is why zero width bugs survive code review.

FunctionU+200BU+200CU+200DU+2060U+FEFF
JS str.trim()removes it from the ends
JS /\s/matches it
Python str.strip()removes it from the ends
Python str.isspace()returns True
Python re \smatches it
Unicode NFKCnormalizes it away
Python repr()shows it as an escape
Each cell was run in Node 20.10 and Python 3.10 on a string holding just that character. U+FEFF is the only one JavaScript treats as whitespace; none of the five has the Unicode White_Space property, and all five are format characters (category Cf).
  1. Jul 2021

    A social post breaks copied code

    Chris Coyier documents the @media trick and the copy-paste risk in CSS-Tricks.
  2. Aug 2021

    SharePoint search fails in Chrome

    A SharePoint 2016 admin reports Chrome inserting ZERO WIDTH SPACE into rich text fields, which broke page search; Edge was the workaround (Microsoft Q&A).
  3. Dec 2021

    VS Code starts highlighting them

    Version 1.63 outlines uncommon invisible characters in source code by default (release notes).
  4. Jul 2024

    Five ZWSPs in one API URL

    A developer blog walks through finding them via VS Code, a %E2%80%8B in the request and the Gremlins extension (post).

FIND AND REMOVE

How to find and remove zero width spaces

Pick the tool you are already in. Each method replaces the character with nothing.

FIND AND REPLACE IN VS CODE

Two invisible bugs, one regex

Illustration
  1. 01Spot the boxesVS Code 1.63 and later outline invisible characters in code by default.
  2. 02Open find with regexPress Cmd+Option+F (Ctrl+H on Windows), turn on .* and search \u200B.
  3. 03Check every matchBoth hits are bugs here: a broken URL and a compare that never matches.
  4. 04Replace all with nothingLeave Replace empty and hit Replace All. Save the file.
Editor mock-up drawn in code. The highlight default and the invisibleCharacters setting come from the VS Code 1.63 release notes; the find box takes JavaScript regex syntax.
  1. 01

    VS Code

    Open Replace (Cmd+Option+F on Mac, Ctrl+H on Windows), turn on regex (.*), search \u200B or [\u200B-\u200D\u2060\uFEFF] and replace all with nothing. Since 1.63, invisible characters in code get a highlight box; the setting is editor.unicodeHighlight.invisibleCharacters. Markdown files are not highlighted by default.
  2. 02

    Microsoft Word

    Open Find and Replace, put ^u8203 in Find (decimal, not hex), leave Replace empty and click Replace All. Turn off "Sounds like" first or the code search fails, per Microsoft Q&A.
  3. 03

    Google Docs

    Open Edit > Find and replace, tick Match using regular expressions, search \x{200B} (the RE2 hex syntax) and replace with nothing. Try it on a copy of the document first.
  4. 04

    JavaScript

    // remove spacers, keep emoji joiners
    s.replace(/[\u200B\u2060\uFEFF]/g, "")
    
    // remove the whole family
    s.replace(/[\u200B-\u200D\u2060\uFEFF]/g, "")
  5. 05

    Python

    import re
    clean = re.sub(r"[\u200b-\u200d\u2060\ufeff]", "", s)
    
    # strip() will not do it:
    "\u200bhi".strip()  # '\u200bhi'
  6. 06

    Command line

    # show lines that contain one (GNU grep)
    grep -nP '\x{200B}' file.txt
    
    # delete them in place (any system with perl)
    perl -CSD -pi -e 's/[\x{200B}-\x{200D}\x{2060}\x{FEFF}]//g' file.txt

No regex at hand?

Paste the text into the ClaudeClean scanner. It marks every zero width character and removes them in the browser. It removes joiners too, so check emoji and Persian or Hindi text in the result. For a wider cleanup of AI drafts (dashes, quotes, spacing), see the AI text cleaner guide.

BLANK NAMES AND MESSAGES

Invisible usernames and blank messages

A big share of people searching for this character want a name or message that looks empty. Here is what to expect.

THE BLANK MESSAGE TRICK

A message that looks empty is not empty

Illustration
  1. 01The bubble holds one characterU+200B is 3 bytes in UTF-8 (E2 80 8B), so the app sees a non-empty message.
  2. 02It has no width and no glyphFonts draw nothing for it, so the bubble renders with only its padding.
  3. 03Apps can strip itMany inputs trim or reject text made only of invisible characters. Same for display names.
Mock-up, not a screenshot of a real app. Whether an app sends, trims or rejects a message made only of a zero width space depends on the app and its version, so test before you rely on it.

What tends to work

  • Messages and bios A single ZWSP often gets through chat apps and text fields because the field is not technically empty.
  • Spacing tricks Putting a ZWSP between line breaks can keep an app from collapsing empty lines in a bio or caption.
  • Testing first Paste into the real field and preview before you save. Behavior changes with app updates.

What tends to fail

  • Trimmed input Many sign-up forms strip or reject names made only of invisible characters.
  • Other blank characters Some guides suggest Hangul filler (U+3164) or braille blank (U+2800). They are not zero width, and platforms block them too.
  • Impersonation A name with hidden characters can look identical to someone else's. Platforms treat that as abuse.

To check which blank-looking characters a piece of text holds, paste it into the invisible character detector. It lists every code point, not just the zero width ones.

THE AI QUESTION

Do ChatGPT and Claude add zero width spaces?

Short version: there is no public evidence that either inserts U+200B on purpose. The one documented case involved a different character.

  1. Apr 20, 2025

    Odd spaces in o3 and o4-mini answers

    Rumi reported narrow no-break spaces, U+202F, in longer answers from OpenAI's o3 and o4-mini, and none in GPT-4o (Rumi). Not zero width spaces.
  2. Apr 22, 2025

    OpenAI: not a watermark

    Rumi's update quotes OpenAI calling the characters a quirk of large-scale reinforcement learning, not a watermark.
  3. Apr 23, 2025

    The pattern stops

    Rumi: "In our latest testing, we are no longer seeing special characters and this issue seems to have been resolved."
  4. Oct 13, 2025

    U+202F again, reported by users

    A thread on the OpenAI developer forum reports GPT-5 (non-reasoning) using U+202F instead of normal spaces. A user report, not an OpenAI statement.
  5. Aug 14, 2026

    Anthropic describes Claude's watermark

    Anthropic says the mark lives in word choice: "Nothing is added to the text and there are no hidden characters" (Anthropic).
  6. Oct 5, 2026

    OpenAI starts textGrain in the EU

    OpenAI's EU text watermark is statistical too, and its help center says it adds no hidden characters.
Nothing is added to the text and there are no hidden characters.
Source: Anthropic, on Claude's text watermark

So where do zero width spaces in AI-written text come from? Usually from the path, not the model: chat interfaces, rich text editors, CMS fields and copy-paste between apps. Reddit threads claiming ChatGPT hides ZWSPs in every answer exist, but none we found came with a reproducible test. Removing hidden characters is still worth it because they break word counts, search and code. It does nothing to a statistical watermark, which lives in word choice. For the full picture on OpenAI text, see the ChatGPT watermark remover guide.

KEEP OR DELETE

When to keep a zero width character and when to delete it

A quick decision guide by context.

Keep it

  • Emoji sequences ZWJ inside family, profession and flag emoji. Removing it splits the emoji.
  • Persian, Urdu, Hindi and other scripts ZWNJ and ZWJ change spelling and rendering. Ask a native reader before stripping.
  • Thai, Khmer, Myanmar ZWSP marks word boundaries for line breaking.
  • Deliberate layout A ZWSP placed on purpose to allow a break in a long URL on a web page (though <wbr> is cleaner).

Delete it

  • Code and config Identifiers, strings, JSON, YAML, env files. Any ZWSP here is a bug waiting to happen.
  • URLs, emails, IDs One hidden byte turns a valid link or login into a 404 or a failed match.
  • Data you will search or compare Spreadsheet cells, database fields, tags, slugs and filenames.
  • Pasted prose Essays, posts and documents copied between apps. In English text it has no job to do.

SEE IT WORK

Paste text, see the zero width characters, clean them

ClaudeClean is named for Claude, but the scanner treats any pasted text the same way.

01

> source text

Paste or drop a file

Paste text or upload a .txt, .docx or .pdf. Up to 2,000 characters works without an account.

02

scan report

3 zero-width1 soft hyphencleanable signals2

Scan in your browser

Zero width spaces, joiners, word joiners, BOMs, no-break spaces, soft hyphens and lookalike letters are marked and removed locally. Your text is not stored.

03

before → after

clearusefulanswer

Copied ✓

Rewrite only if you want

An optional rewrite smooths AI habits with a before and after diff. It sends text to OpenAI and is best effort, with no detector result promised.

PRICING

Clean the text free. Rewrite more with Pro.

The scan and hidden-character cleanup are free. Pro adds room for rewrites and files.

PRO

CLAUDECLEAN PRO

ClaudeClean Pro

$5/ month

Cancel anytime.

  • 300 credits every month (≈300,000 characters of rewriting)
  • 20,000 characters per request
  • Clean .txt, .docx and .pdf files
  • Light / medium / strong intensity
  • Dashboard with history
Checking account…

Free: 10 credits a month with an account, or try 2,000 characters right here without one. Strong rewrites cost 2× credits.

GLOSSARY

Zero width terms in plain English

ZWSP (U+200B)
Zero width space. An invisible line break opportunity.
ZWNJ (U+200C)
Zero width non-joiner. Keeps two characters from joining or forming a ligature.
ZWJ (U+200D)
Zero width joiner. Asks the font to join neighbors, used in emoji sequences and Indic scripts.
WJ (U+2060)
Word joiner. An invisible character that forbids a line break, the opposite of ZWSP.
BOM (U+FEFF)
Byte order mark. Belongs at the very start of a file, if anywhere. Elsewhere it is junk.
Format character (Cf)
The Unicode category for invisible characters that affect layout or joining. All five above are in it.
<wbr>
HTML element that allows a line break, like a ZWSP, without adding a character to the text.
Grapheme
What a reader sees as one character. The family emoji is one grapheme made of five code points.

WATCH

Zero width spaces in three minutes

A short general explainer if you prefer video.

Zero-Width Spaces - Friday Minis 281 by 0612 TV w/ NERDfirst. Posted May 2019; the character and its behavior have not changed since

SOURCES

Where these facts come from

Standards and vendor documentation first, then real-world bug reports.

Unicode Consortium

General Punctuation code chart (U+2000 to U+206F)

Names, abbreviations and the official notes for ZWSP, ZWNJ, ZWJ and word joiner.

View source

Unicode Consortium

Emoji ZWJ sequences

The full list of emoji built with U+200D, including family emoji.

View source

MDN Web Docs

<wbr>: the line break opportunity element

States that <wbr> behaves like U+200B.

View source

Wikipedia

Zero-width space

UTF-8 bytes, HTML entities and use in Thai, Khmer and Myanmar.

View source

Wikipedia

Zero-width joiner and zero-width non-joiner

Emoji sequences, Devanagari conjuncts and Persian examples.

View source

Wikipedia

Alt code

Why Alt codes above 255 only work in rich edit controls, and the EnableHexNumpad setting.

View source

Visual Studio Code

November 2021 release (1.63)

Unicode highlighting of invisible and ambiguous characters, on by default.

View source

Office Watch

Alt+X shortcut in Word and Outlook

Type a hex code and press Alt+X to insert the character.

View source

Microsoft Q&A

Find and replace with Unicode codes in Word

^u takes decimal codes; turn off Sounds like.

View source

Google Docs Help

Find and replace

Regular expression matching in Docs.

View source

Rumi

New ChatGPT models seem to leave watermarks on text

April 2025 U+202F findings and the follow-up updates.

View source

Anthropic

Claude's text watermark

States that no characters are added and there are no hidden characters.

View source

CSS-Tricks

Zero-Width Space

Chris Coyier on using ZWSP in social posts and the copy-paste risk.

View source

Microsoft Q&A

Why does Chrome randomly inject the ZeroWidthSpace?

SharePoint 2016 rich text fields and broken page search.

View source

FAQ

Zero width space FAQ.

A zero width space is the Unicode character U+200B, often shortened to ZWSP. It has no width and draws nothing, but it tells software that a line may break at that spot. Unicode describes it as a character for invisible word separation and line break control. In UTF-8 it is stored as the three bytes E2 80 8B.
Use the copy button on this page, which puts exactly one U+200B on your clipboard. Other options: run copy("\u200B") in a browser's developer console, or on a Mac run printf '\u200b' | pbcopy in Terminal. Paste it into a text field and check with an invisible character checker that it arrived.
Use &#8203; (decimal), &#x200B; (hex) or the named entity &ZeroWidthSpace;. The <wbr> element gives the same line break opportunity in HTML; MDN says it behaves like U+200B. In CSS generated content, write content: "\200B".
In Microsoft Word or Outlook, type 200B and press Alt+X. The classic Alt+8203 numpad trick does not work in most apps: Notepad and browsers take the number modulo 256, so you get a control character instead. Windows can accept hex numpad input after a registry change (EnableHexNumpad), but copying the character is easier.
U+200B (zero width space) marks a place where a line may break. U+200D (zero width joiner) asks the font to join the characters on either side, which is how emoji like the family emoji are built and how some Indic scripts control conjuncts. U+200C (zero width non-joiner) does the opposite and keeps letters apart, which Persian relies on.
In code, replace the regex [\u200B-\u200D\u2060\uFEFF] with nothing, or keep U+200C and U+200D if your text has emoji or Persian and Indic scripts. In VS Code, use Find and Replace with regex \u200B. In Word, search for ^u8203 and replace with nothing. Or paste the text into a browser cleaner that strips them locally.
There is no published evidence that it does on purpose. In April 2025 Rumi found narrow no-break spaces (U+202F, not U+200B) in o3 and o4-mini answers; OpenAI called it a quirk of reinforcement learning, not a watermark, and Rumi saw it stop days later. OpenAI says its textGrain watermark adds no hidden characters, and Anthropic says the same for Claude's watermark.
Sometimes, but many apps trim it or reject names that contain only invisible characters, and rules change with app updates. Some people use other blank-looking characters instead, which platforms may also block. Test it on the platform first and do not use invisible names to impersonate anyone.