Unicode Inspector

See every code point, byte and invisible character in your text.

Loading the interactive tool… It runs in your browser — if it doesn't appear, enable JavaScript.

Paste text and see exactly what it's made of: every code point with its hex value, name and UTF-8 byte length, plus four different character counts that all disagree for good reasons. Invisible and control characters are highlighted, because they're the usual explanation for two strings that look identical but don't compare equal.

The counts are the useful part. A flag emoji is one grapheme, two code points, four UTF-16 units and eight UTF-8 bytes — so a database column sized in bytes, a JavaScript `.length` check and a user's idea of "one character" all disagree, and any of them can be the cause of a truncation bug.

Frequently asked questions

Why does my string have a different length than I expect?

Because JavaScript's `.length` counts UTF-16 code units, not characters. An emoji outside the Basic Multilingual Plane counts as 2, and a flag counts as 4. Use `[...string].length` for code points, or Intl.Segmenter for graphemes — which is what a person means by "characters".

How do I find invisible characters in my text?

Paste it here — zero-width spaces, non-breaking spaces, soft hyphens, the BOM and control characters are all highlighted with their names. These arrive via copy-paste from web pages, Word and design tools, and are the usual reason a lookup or comparison fails on text that looks correct.

What's the difference between a code point and a grapheme?

A code point is one Unicode value; a grapheme is what a reader perceives as a single character. They differ whenever combining marks or emoji sequences are involved: é can be one code point or two (e plus a combining acute), and both render identically as one grapheme.

Why do UTF-8 byte counts matter?

Because storage and protocol limits are usually specified in bytes. A VARCHAR(20) in some databases means 20 bytes, not 20 characters — so a name in Japanese, where each character is three bytes, truncates at seven characters rather than twenty.