Skip to content
PithLab

↑↓ to move · Enter to open · Esc to close

Unicode Character Inspector and Invisible Text Finder

Inspect code points, bytes and escapes, and find hidden characters.

Characters
0
Code points
0
UTF-16 units
0
UTF-8 bytes
0
Invisible
0
Bidi controls
0
Lookalikes
0
Use via API

Inspect every character in text: code point, name, category, script, UTF-8/UTF-16 bytes, escapes, and warnings for invisible, bidi-control and look-alike (homoglyph) characters. Can also escape the text or strip invisible characters. Send JSON, get JSON back.

POST https://pithlab.com/api/v1/tools/unicode-character-inspector

curl https://pithlab.com/api/v1/tools/unicode-character-inspector \
  -H "Authorization: Bearer $PITHLAB_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":"Pаy​","action":"inspect"}'

Fields and responseOpenAPI documentGet an API key

About the Unicode Character Inspector

See every character in your text with its code point, UTF-8 and UTF-16 bytes, escapes and category. Find zero-width, bidi and lookalike characters.

How to use the Unicode Character Inspector

  1. Paste the text you want to inspect.
  2. Read the summary for counts of characters, code points, UTF-16 units and UTF-8 bytes, plus any warnings.
  3. Check the table: each row is one visible character (grapheme), split into the code points it is made of.
  4. Look for warnings about invisible characters, direction controls and Cyrillic or Greek lookalikes.
  5. Copy the text escaped for JavaScript, Python, HTML or CSS, or with invisible characters removed.

Examples

A Cyrillic letter hiding in a Latin word

Input

pаy

Output

U+0070 | p | LATIN SMALL LETTER P | Lowercase letter, Latin
U+0430 | а | Lowercase letter, Cyrillic | Looks like Latin "a"
U+0079 | y | LATIN SMALL LETTER Y | Lowercase letter, Latin
A zero width space between two letters

Input

a​b

Output

U+0061 | a | LATIN SMALL LETTER A | Lowercase letter, Latin
U+200B | ZERO WIDTH SPACE | Format, Common | Invisible character
U+0062 | b | LATIN SMALL LETTER B | Lowercase letter, Latin
An accented letter built from a combining mark

Input

é

Output

U+0065 | e | LATIN SMALL LETTER E | Lowercase letter, Latin
U+0301 | ◌́ | COMBINING ACUTE ACCENT | Non-spacing mark, Inherited

Frequently asked questions

What is the difference between a character, a code point and a code unit?

A character (grapheme) is what you see, such as é or 👩🏽‍💻. It can be made of several code points, the numbers Unicode assigns. UTF-16, used by JavaScript, stores each code point as one or two 16-bit code units, and UTF-8 as one to four bytes.

Why don't I see a name for every character?

The full Unicode name list is several megabytes, too large to load for a quick tool. Names are shown for ASCII letters and digits and for a short table of notable characters such as spaces, joiners, direction marks and dashes. Category and script come from your browser's built-in Unicode data.

What do the warnings mean?

Invisible characters (such as zero width space) and unusual spaces can break searches, passwords and code. Bidirectional controls can make text display in a different order than it is stored, which is used in Trojan Source attacks. Lookalikes are Cyrillic, Greek or fullwidth letters that resemble Latin ones and are used in phishing domains.

Is the lookalike check complete?

No. It covers the most common Cyrillic, Greek and fullwidth letters that imitate Latin ones, and flags words mixing scripts. Unicode's full confusables list is much larger, so treat a clean result as a good sign rather than proof.

Why are joiners inside emoji not flagged?

Emoji such as 👩🏽‍💻 are built with zero width joiners and variation selectors on purpose. They are only flagged when they appear outside an emoji, where they are usually hidden by accident or on purpose.