Guide
Finding out what is really in a piece of text with Unicode
Text on a screen is a polite fiction. Behind each letter is a number, behind a flag are two numbers, and behind an apparently empty gap there may be a character with no width at all. When a search fails, a password is rejected, a CSV import breaks or a username looks suspicious, the reason is usually one of these hidden details. The inspector lays them out one code point per row.
What is listed for each character
The table gives the code point in the usual U+ notation, the name where one is available, the two-letter general category (such as Lu for an upper-case letter, Ll for lower-case, Zs for a space separator and Cf for a format control), the script (Latin, Cyrillic, Han and so on), and the character’s bytes in UTF-8 and UTF-16. Names are included for ASCII and for the common punctuation, spaces and emoji; for other characters the page shows the number and leaves the name out, since a full name table would add hundreds of kilobytes.
The summary above the table
Above the table are counts that people often confuse: code points, visible characters (grapheme clusters), UTF-8 bytes and UTF-16 units, which is the length that JavaScript reports. The scripts line lists the writing systems found. Warnings appear when the text mixes scripts, when it contains invisible or unusual space characters, and when it is not in normalisation form NFC, meaning that some characters are stored as a base letter followed by a combining mark.
Invisible and look-alike characters
Zero-width spaces, zero-width joiners, soft hyphens, byte order marks and no-break spaces are all legitimate characters and all easy to paste by accident from web pages and documents. They break comparisons, add gaps to identifiers and corrupt data fields. The table marks their rows and shows their code points, such as U+200B, so you can find and delete them. Look-alike letters, for instance a Cyrillic а in an otherwise Latin word, show up through the script column and the mixed-script warning.
Escape sequences
Choose Details on a row to see the character as an escape in several settings: JavaScript and JSON, Python, Java and C#, C and C++, CSS, HTML (as a hexadecimal and a decimal reference) and as percent-encoded UTF-8 bytes for URLs. This saves a trip to a reference table when you need to write a character into source code without relying on the file’s encoding.
A worked example
The Sample button loads a line containing an accented word, a flag, typographic quotes, a letter e followed by a combining acute accent, a zero-width space, an arrow, Japanese and Russian text. The summary reads 54 code points, 52 visible characters, 86 UTF-8 bytes and 56 UTF-16 units, with the scripts Latin, Han and Cyrillic. Two code points disappear into one visible character twice: the flag is two regional indicators and the combined accent is a letter plus a mark. The page reports one invisible character, and the text is flagged as not NFC because of the combining accent.
Limits
The table shows the first 400 characters of long input. Categories and scripts come from your browser’s copy of Unicode, which may be older than the newest standard, so recently added characters can appear as unassigned. The page does not repair text, change normalisation or remove characters; it shows what is there. A full list of character names is not included.
Related tools
- UTF-8 Byte Counter focuses on the size of text in each encoding.
- Punycode Converter shows how look-alike domain names are encoded.
- HTML Encoder turns special characters into entities.
- Text to Binary shows the bytes of text in binary.
Checked against the current version of the Unicode Inspector on .

