Unicode Character Inspector
Inspect any text character by character: Unicode code points, UTF-8 bytes, UTF-16 units, HTML entities, CSS and JS escapes, plus NFC, NFD, NFKC and NFKD forms.
Character breakdown
| Char | Code point | Dec | UTF-8 | UTF-16 | HTML | CSS | JS |
|---|---|---|---|---|---|---|---|
| C | U+0043 | 67 | 43 | 0043 | C | \000043 | \u{43} |
| a | U+0061 | 97 | 61 | 0061 | a | \000061 | \u{61} |
| f | U+0066 | 102 | 66 | 0066 | f | \000066 | \u{66} |
| é | U+00E9 | 233 | C3 A9 | 00E9 | é | \0000E9 | \u{e9} |
| SPACE | U+0020 | 32 | 20 | 0020 |   | \000020 | \u{20} |
| 😀 | U+1F600 | 128512 | F0 9F 98 80 | D83D DE00 | 😀 | \01F600 | \u{1f600} |
| SPACE | U+0020 | 32 | 20 | 0020 |   | \000020 | \u{20} |
| 中 | U+4E2D | 20013 | E4 B8 AD | 4E2D | 中 | \004E2D | \u{4e2d} |
| ZERO WIDTH SPACE | U+200B | 8203 | E2 80 8B | 200B | ​ | \00200B | \u{200b} |
Per-character detail
Unicode normalization
| Form | Result | Code points | UTF-16 units | UTF-8 bytes |
|---|---|---|---|---|
| NFC | Café 😀 中(unchanged) | 9 | 10 | 17 |
| NFD | Café 😀 中 | 10 | 11 | 18 |
| NFKC | Café 😀 中(unchanged) | 9 | 10 | 17 |
| NFKD | Café 😀 中 | 10 | 11 | 18 |
NFC composes characters where possible and NFD decomposes them, so é is either one code point or an e followed by a combining accent. The K forms additionally fold compatibility characters — the ligature fi becomes fi — which changes the text, so use them for search keys rather than for storage.
What is the Unicode Character Inspector?
Paste any text and this inspector splits it into real Unicode code points — not UTF-16 units — so emoji and other characters outside the Basic Multilingual Plane are shown as the single characters they actually are.
- Splits text into true code points, so emoji count as one character
- UTF-8 bytes, UTF-16 units and surrogate pairs shown per character
- HTML numeric entities plus CSS \XXXXXX and JavaScript \u{...} escapes
- Invisible and control characters named rather than silently rendered
- All four normalization forms with their differing byte and unit lengths
- Copy the whole breakdown as TSV, or any normalized form directly
How to use the Unicode Character Inspector
- 1
Type or paste text into the input box.
- 2
Read the summary counts: code points, UTF-16 units and UTF-8 bytes.
- 3
Scan the breakdown table for each character's code point, UTF-8 bytes, UTF-16 units and escapes.
- 4
Check the per-character cards for the Unicode plane and surrogate pair information.
- 5
Compare the NFC, NFD, NFKC and NFKD rows, and copy whichever normalized form you need.
About the Unicode Character Inspector
Paste any text and this inspector splits it into real Unicode code points — not UTF-16 units — so emoji and other characters outside the Basic Multilingual Plane are shown as the single characters they actually are. For each one you get the U+ code point, decimal value, UTF-8 byte sequence, UTF-16 units, HTML numeric entity, and CSS and JavaScript escapes.
Invisible and control characters are labelled rather than rendered, which makes it straightforward to find a zero-width space, a soft hyphen, a non-breaking space or a stray byte-order mark that is breaking a comparison or a layout.
All four normalization forms are computed side by side with their code point, UTF-16 and byte lengths, so you can see exactly how NFC and NFD differ and where the compatibility forms change your text. Everything runs locally in your browser.
Frequently asked questions
Why does an emoji count as two characters in JavaScript?
Because JavaScript strings are sequences of UTF-16 units, and any code point above U+FFFF needs two of them — a surrogate pair. U+1F600 is stored as D83D DE00, so .length returns 2. Using Array.from or spreading the string gives you the single code point instead.
What is the difference between NFC and NFD?
NFC composes characters into their shortest form, so é is one code point. NFD decomposes them, so the same é becomes an e followed by a combining acute accent — two code points and three UTF-8 bytes instead of two. The text looks identical but will not compare as equal.
When should I use NFKC or NFKD?
Only for search keys and identifier matching. The compatibility forms fold characters that merely look similar, so the ligature fi becomes fi and superscripts become plain digits. That is useful for matching but lossy, so never store the result as your canonical text.
How do I find invisible characters in my text?
Paste it here and look for the labelled badges in the table. Zero-width spaces, zero-width joiners, soft hyphens, non-breaking spaces and byte-order marks are all named explicitly instead of being rendered as nothing.
How many bytes does a character take in UTF-8?
Between one and four. ASCII characters take one, most Latin and Greek letters take two, most CJK characters and symbols take three, and emoji and other supplementary-plane characters take four. The exact sequence is shown for every character.
Is my text sent anywhere?
No. Everything is computed with the browser's own text APIs inside your tab, so you can safely inspect passwords, tokens or personal data that is behaving strangely.
Related tools
ASCII Table
Interactive ASCII table with decimal, hex, octal, binary, character and description for codes 0-127, plus optional extended 128-255. Searchable, free and private.
Character Counter
Count characters with and without spaces in real time and check limits for Twitter/X, Instagram captions, meta descriptions and SMS messages.
Text to Unicode Converter
Convert text to Unicode escapes and back: JavaScript \uXXXX, U+ code points or HTML &#x entities. Emoji-safe, bidirectional, runs in your browser.
HTML Entity Encoder
Encode text to HTML entities online: named entities for &, <, >, quotes plus numeric entities for the rest. Choose named or numeric — free and 100% private.