Unicode Character Inspector
Paste any text — one emoji, a word with accents, a line of code — and see it split into the characters a reader sees and the code points they are made of, each with its official Unicode name, category, script, block, UTF-8 bytes, UTF-16 code units and ready-to-paste HTML, JavaScript and CSS escapes. A normalization table shows how NFC, NFD, NFKC and NFKD would change it.
Paste or type something above to see every character in it.
How to Use the Unicode Character Inspector
- Paste your text. A single character or a few paragraphs. Try a sample loads two spellings of Café, an emoji with a skin tone, a ligature and ℝ.
- Read the counts. Grapheme clusters, code points, UTF-16 code units and UTF-8 bytes — four correct answers to "how long is this?", for four different purposes.
- Go character by character. Each user-perceived character is listed with the code points inside it: code point, name, category, script, block and UTF-8 bytes. Show opens the HTML references, the JavaScript and CSS escapes, the URL encoding and the Unicode version that added the character.
- Compare normalization forms, or export. See whether NFC, NFD, NFKC or NFKD would change your text, and download every column as a CSV file.
Characters, Code Points and Bytes
Unicode gives every character a number, its code point, written U+ followed by at least four hexadecimal digits: U+0041 is A, U+00E9 is é, U+1F600 is 😀. There are 1,114,112 code points, from U+0000 to U+10FFFF. What a reader sees as one character — a grapheme cluster — can be several of them: 👩🏽💻 (woman technologist with a medium skin tone) is a woman, a skin-tone modifier, a zero-width joiner and a laptop. How long it is depends on who is counting:
| Measure | Length of 👩🏽💻 | Who counts this way |
|---|---|---|
| Grapheme clusters | 1 | People, and text editors when they move the cursor |
| Code points | 4 | Python's len() and other code-point-based string APIs |
| UTF-16 code units | 7 | JavaScript's .length, Java, C# and the Windows APIs |
| UTF-8 bytes | 15 | Files, web pages and network protocols |
Worked Example: Two Ways to Write Café
The sample contains Café twice, and the two look identical. The inspector shows that the first é is U+00E9 LATIN SMALL LETTER E WITH ACUTE — one code point, two UTF-8 bytes (C3 A9) — while the second is U+0065 LATIN SMALL LETTER E followed by U+0301 COMBINING ACUTE ACCENT: two code points and three bytes (65 CC 81) that render as one character. A program comparing the strings code point by code point calls them different, which is how search, sorting and duplicate checks miss matches that look obvious. Normalization makes them equal. For the whole sample, which is 23 code points and 40 UTF-8 bytes as pasted:
| Form | Code points | UTF-8 bytes | What it changed |
|---|---|---|---|
| NFC | 22 | 39 | Composed e + ◌́ into é |
| NFD | 24 | 41 | Split é into e + ◌́ |
| NFKC | 23 | 36 | Composed é, and replaced fi with f + i and ℝ with R |
| NFKD | 25 | 38 | Split both é, and replaced fi and ℝ as NFKC does |
NFC is the form most of the web and most databases expect. The K forms also fold compatibility characters — ligatures, styled letters, superscripts, full-width forms — into plain ones, which helps search but loses information: use them for matching, not for storing text.
Reading the Columns
- Name — the character's official Unicode name. Names never change once published, even when they contain a mistake; a corrected name is given as an alias in the details. Control characters, private-use and unassigned code points have no name and are shown with a label such as <control-000A> or <reserved-0378>.
- Category — the General Category, from Lu (uppercase letter) and Mn (nonspacing mark) to Zs (space separator) and Cf (format character).
- Script — the writing system, such as Latin, Cyrillic or Han. Common marks characters shared by many scripts, like digits and punctuation, and Inherited marks combining marks, which take the script of the letter they attach to.
- Block — the named range of code points the character sits in. Blocks are an allocation convenience rather than a classification: Basic Latin also holds the digits and punctuation.
- Escapes — HTML decimal (
é) and hex (é) references work everywhere, and named references such asécome from the HTML Standard's list. JavaScript writes\u00E9inside the Basic Multilingual Plane and\u{1F600}(or the surrogate pair\uD83D\uDE00) beyond it. CSS reads up to six hex digits after a backslash, so when the next character is a hex digit or a space, end the escape with a space or pad it to six digits (\0000E9).
Where the Data Comes From
Names, categories, scripts, blocks and versions come from the Unicode Character Database, version 18.0, © Unicode, Inc., used under the Unicode License v3. The inspector downloads a compact copy — about 500 KB, or 110–150 KB compressed in transit — the first time you inspect something; Hangul syllable and CJK ideograph names are generated from their code points by the rules in the Unicode Standard rather than downloaded. HTML named references come from the WHATWG HTML Standard's entity list (CC BY 4.0). The text you paste is never uploaded: only the data file travels, and everything else happens in your browser.
Grapheme clusters and normalization use your browser's own Unicode support, which can lag a version behind, so the very newest characters may be named correctly but split or normalized as if unknown.
Frequently Asked Questions
- How do I find out what a Unicode character is?
- Paste it into the inspector. You get its code point, its official name, its category, script and block, and the Unicode version that added it — enough to search for it, type it, or escape it in HTML, JavaScript or CSS.
- What is the difference between a character, a code point and a grapheme cluster?
- A code point is a number Unicode assigns, such as U+0301. A grapheme cluster is what a reader perceives as one character, and it can contain several code points: e + U+0301 displays as é, and many emoji are four or more code points joined together. "Character" usually means a grapheme cluster in everyday use and a code point in technical writing.
- How many bytes is a character in UTF-8?
- One to four bytes per code point: 1 for ASCII, 2 for most Latin, Greek, Cyrillic, Hebrew and Arabic letters, 3 for the rest of the Basic Multilingual Plane (including most Chinese, Japanese and Korean characters), and 4 for emoji and other characters beyond U+FFFF. A grapheme cluster can be much larger — 👩🏽💻 is 15 bytes.
- Why does JavaScript say an emoji has a length of 2?
- Because
.lengthcounts UTF-16 code units, and characters beyond U+FFFF take two of them, a surrogate pair. Use[...text].lengthto count code points, orIntl.Segmenterwith grapheme granularity to count the characters a reader sees. - What is the HTML code for a character?
- Any character can be written as a decimal reference,
&#+ its code point in decimal +;, or a hex reference such asℝ. About 1,450 characters also have named references such asé; the inspector lists them under Show. - What do NFC, NFD, NFKC and NFKD mean?
- They are the four Unicode normalization forms. NFC composes letters and accents into single code points where possible, and NFD decomposes them. NFKC and NFKD do the same and also replace compatibility characters — ligatures, styled letters, full-width forms — with their plain equivalents.