Unicode Character Inspector

Break any text into its Unicode code points and see encodings, escapes and invisible characters.

Try:

Finding characters you cannot see

Invisible code points are flagged with a badge in the character column and explained underneath, so you can tell a joiner doing real work inside an emoji from a zero-width space that arrived by accident. The tool describes what each one does; it does not judge them, because most have entirely legitimate uses.

This is a debugging and document-review aid. If you are checking text somebody sent you, the useful question is usually whether the displayed characters match the stored ones — the code point list answers that directly.

Three ways to count a string

See grapheme cluster for why these disagree.

Privacy

Everything on this page runs in your browser. What you type or paste is never sent to a server, never logged and never stored unless you explicitly save it — in which case it stays in this browser's local storage. Read the privacy policy.

Frequently asked questions

Why does my text have more characters than I can see?

Some code points are deliberately invisible: zero-width spaces, soft hyphens, byte-order marks and joiners all take up no width. They commonly survive copying out of a PDF, a spreadsheet or a formatted web page.

Why does my string fail to match even though it looks identical?

Usually a look-alike character. A non-breaking space looks exactly like a space but is a different code point, and Greek or Cyrillic letters can be visually identical to Latin ones. Paste both strings here and compare the code points.

What does the replacement character mean?

U+FFFD marks a place where bytes could not be decoded as valid text. It means the string was already damaged before it arrived — normally a file read as the wrong encoding. The original characters cannot be recovered from it.

Which count should I use for a character limit?

It depends on what is counting. Most social platforms count something close to graphemes, databases usually count bytes, and JavaScript's .length counts UTF-16 units. All three are shown so you can check against whichever applies.