Unicode Character Inspector
Break text into code points and inspect UTF-8 bytes, escapes, and hidden characters — entirely in your browser.
29
Graphemes
What a reader calls characters
29
Code points
Unicode scalar values
30
UTF-16 length
JavaScript .length
41
UTF-8 bytes
Bytes on the wire
4 invisible or lookalike characters found. These are flagged in the Note column — they are a common cause of string comparisons that fail despite looking identical.
| # | Char | Code point | UTF-8 | Escape | Category | Note |
|---|---|---|---|---|---|---|
| 0 | H | U+004872 | 48 | \u0048 | Letter | |
| 1 | e | U+0065101 | 65 | \u0065 | Letter | |
| 2 | l | U+006C108 | 6C | \u006C | Letter | |
| 3 | l | U+006C108 | 6C | \u006C | Letter | |
| 4 | o | U+006F111 | 6F | \u006F | Letter | |
| 5 | U+002032 | 20 | \u0020 | Whitespace | ||
| 6 | 👋 | U+1F44B128075 | F0 9F 91 8B | \u{1F44B} | Symbol | |
| 7 | U+002032 | 20 | \u0020 | Whitespace | ||
| 8 | c | U+006399 | 63 | \u0063 | Letter | |
| 9 | a | U+006197 | 61 | \u0061 | Letter | |
| 10 | f | U+0066102 | 66 | \u0066 | Letter | |
| 11 | é | U+00E9233 | C3 A9 | \u00E9 | Letter | |
| 12 | U+002032 | 20 | \u0020 | Whitespace | ||
| 13 | — | U+20148212 | E2 80 94 | \u2014 | Invisible / lookalike | Em dash (not a hyphen) |
| 14 | U+002032 | 20 | \u0020 | Whitespace | ||
| 15 | “ | U+201C8220 | E2 80 9C | \u201C | Invisible / lookalike | Curly left double quote (not a straight quote) |
| 16 | s | U+0073115 | 73 | \u0073 | Letter | |
| 17 | m | U+006D109 | 6D | \u006D | Letter | |
| 18 | a | U+006197 | 61 | \u0061 | Letter | |
| 19 | r | U+0072114 | 72 | \u0072 | Letter | |
| 20 | t | U+0074116 | 74 | \u0074 | Letter | |
| 21 | ” | U+201D8221 | E2 80 9D | \u201D | Invisible / lookalike | Curly right double quote (not a straight quote) |
| 22 | · | U+200B8203 | E2 80 8B | \u200B | Invisible / lookalike | Zero-width space |
| 23 | q | U+0071113 | 71 | \u0071 | Letter | |
| 24 | u | U+0075117 | 75 | \u0075 | Letter | |
| 25 | o | U+006F111 | 6F | \u006F | Letter | |
| 26 | t | U+0074116 | 74 | \u0074 | Letter | |
| 27 | e | U+0065101 | 65 | \u0065 | Letter | |
| 28 | s | U+0073115 | 73 | \u0073 | Letter |
Why the four counts differ:
- An emoji is one grapheme and one code point, but two UTF-16 units — which is why JavaScript reports
"😀".lengthas 2. - An accented letter may be one code point or a letter plus a combining mark — two code points that render as one grapheme.
- UTF-8 bytes are what actually travel over the network and count against database column limits.
Your Data Never Leaves Your Device
Every tool runs entirely in your browser. Nothing you type is uploaded, stored, or logged on our servers.
The Unicode Character Inspector breaks text into individual code points and shows, for each one, its hex and decimal value, UTF-8 byte sequence, escape sequence, HTML entity, and general category. It exists mainly to answer two questions that are otherwise genuinely hard to investigate: why two strings that look identical do not compare equal, and why a string's length is not the number you expected.
The usual culprits are flagged automatically — zero-width spaces, byte order marks, non-breaking spaces, directional overrides, and the curly quotes and en dashes that arrive when text is pasted out of a word processor. Four separate counts are shown because they genuinely differ: graphemes are what a reader counts, code points are Unicode scalars, UTF-16 units are what JavaScript's .length returns, and UTF-8 bytes are what your database column limit actually measures.
FAQ
JavaScript's .length counts UTF-16 units, not characters. An emoji is a single character but two UTF-16 units, so "emoji".length overcounts. This tool shows graphemes, code points, UTF-16 units, and UTF-8 bytes side by side.
Paste it in — zero-width spaces, byte order marks, non-breaking spaces, and directional overrides are highlighted and named in the Note column, and shown with a visible placeholder in the Char column.
Usually a lookalike character: a curly apostrophe instead of a straight one, an en dash instead of a hyphen, or a non-breaking space instead of a regular one. All of these are flagged here.
A grapheme is what a reader perceives as one character. It can be several code points — an emoji with a skin-tone modifier, or a letter followed by a combining accent. Text truncation should count graphemes, not code points.
It is what travels over the network and what most database VARCHAR limits actually measure. A Latin letter is one byte, most accented and Greek letters two, CJK three, and emoji four.
No. Analysis runs entirely in your browser, so you can safely inspect passwords, tokens, or anything else you suspect has a stray character in it.