BrowserTools
Home / Encoders / Unicode Inspector

Unicode Inspector

See every character in a text with its code point and name, and find hidden or look-alike characters.

Loading Unicode Inspector… If nothing happens, please enable JavaScript.

Text that looks identical on screen can be very different underneath. A word copied from a PDF may contain a soft hyphen, a username may hide a zero-width space, a link may swap the Latin a for the Cyrillic а, and an accented letter may be stored as one character or as a base letter plus a combining accent. The Unicode Inspector breaks any text into its user-perceived characters (grapheme clusters) and lists every code point inside them with its U+ number, official Unicode name, general category and block, so you can see exactly what you are dealing with.

Examples

Input é (one code point)
Output U+00E9 LATIN SMALL LETTER E WITH ACUTE

NFC form, 2 bytes in UTF-8.

Input é (two code points)
Output U+0065 + U+0301 COMBINING ACUTE ACCENT

NFD form, looks identical but compares as different.

Input pаypal (with Cyrillic а)
Output U+0430 CYRILLIC SMALL LETTER A

Flagged as a mixed-script word.

Frequently asked questions

How do I find a zero-width space in my text?
Paste the text in the box. Every invisible character appears in the table as a labelled badge (ZWSP for zero-width space, ZWJ, WJ, BOM, SHY and so on) and the warning list at the top counts them. Use the clean-up panel to copy a version without them.
What is the difference between a character, a code point and a byte?
A code point is one numbered entry in Unicode, such as U+00E9 for é. What a reader sees as one character (a grapheme) can be several code points: an emoji with a skin tone and a joiner can be four or more. Bytes depend on the encoding: UTF-8 uses 1 to 4 bytes per code point and UTF-16 uses 2 or 4. The counters show all of these for your text.
Why do two strings that look the same not match?
Usually because of normalization or hidden characters. "Café" can be stored with a precomposed é (NFC) or with e followed by a combining accent (NFD); they render the same but compare as different. A no-break space, a zero-width character or a Cyrillic look-alike letter has the same effect. Normalizing both strings to NFC and removing invisible characters fixes most cases.
What are NFC, NFD, NFKC and NFKD?
They are the four Unicode normalization forms. NFC composes characters where possible and is the recommended form for storage and the web. NFD decomposes them into base letters and combining marks. The K (compatibility) forms additionally fold look-alike variants into a plain form: the ligature fi becomes fi, superscript ² becomes 2 and fullwidth letters become ASCII. K forms lose information, so use them for search and comparison rather than for storing text.
What is a homoglyph or mixed-script attack?
It is the use of characters from another script that look like Latin letters, for example the Cyrillic а (U+0430) in place of the Latin a, to make a fake domain, username or file name look genuine. The inspector flags any word that mixes Latin with Cyrillic, Greek, Armenian or Cherokee letters and shows the exact code points, so the substitution becomes obvious.
What are bidirectional control characters and why are they flagged?
Characters such as RLO (U+202E) or RLI (U+2067) tell the renderer to display the following text right to left. They are needed for some Arabic and Hebrew text, but they can also disguise content: a file named invoice, then RLO, then fdp.exe is displayed as invoiceexe.pdf, and the 2021 Trojan Source research showed they can hide malicious logic in source code. Outside genuine right-to-left text they are almost always a red flag.
Is my text uploaded anywhere?
No. The analysis runs entirely in your browser. The only thing downloaded is the Unicode name table, which is the same for everyone, and it is fetched from this site, not from a third party.
Where do the character names come from?
From the Unicode Character Database published by the Unicode Consortium under the Unicode License, version shown at the bottom of the page. Names for CJK ideographs and Hangul syllables are generated by the standard's own algorithmic rules. The general category comes from your browser's built-in Unicode support, so a very new character may show as unassigned in an older browser.

About Unicode Inspector

The tool flags the characters that usually cause trouble. Invisible format characters such as the zero-width space, zero-width joiner, word joiner and byte order mark; bidirectional controls like RLO and LRI, which can visually reorder text and were the basis of the "Trojan Source" attack on source code; no-break, thin and other unusual spaces that do not match a normal space in code or search; blank-looking letters used to fake empty names; and words that mix Latin with Cyrillic or Greek letters, the classic homoglyph trick behind phishing domains. Emoji sequences are recognised, so the joiners inside 👩🏽‍💻 are not reported as suspicious.

Click any row to get every representation of that code point: UTF-8 bytes, UTF-16 code units, HTML numeric and named entities, JavaScript, CSS and Python escapes, and the URL-encoded form. The counters above the table show the number of graphemes, code points, UTF-16 units (what JavaScript's length returns) and UTF-8 bytes, which explains why a database column, an SMS or a tweet counts your text differently from what you see.

The normalization panel compares the four Unicode normalization forms (NFC, NFD, NFKC, NFKD) and lets you copy or inspect any of them, which is how you fix strings that look equal but fail an equality test. Finally, the clean-up panel removes invisible and bidirectional characters, replaces exotic spaces with a normal one, drops stray control characters and optionally normalizes the result, leaving emoji intact. Character names and blocks come from the official Unicode Character Database, and everything runs locally in your browser.

UTF-8 was designed on a diner placemat

In September 1992, Ken Thompson and Rob Pike of Bell Labs were unhappy with the proposed multibyte encoding for the new universal character set. Over dinner at a diner in New Jersey, Thompson sketched a better scheme on a placemat: ASCII stays one byte, no byte of a multibyte sequence can be mistaken for an ASCII character, and you can always find the start of a character by looking at the top bits. They implemented it in the Plan 9 operating system within days.

That design is UTF-8, and its backward compatibility with ASCII is why it took over the web, where the large majority of pages now use it. Unicode itself had started a few years earlier, with Joe Becker's 1988 proposal for a "Unicode" character set and the first version of the standard published in 1991.

The flexibility that made Unicode universal also created new security problems. In 2017 a researcher registered a domain written entirely in Cyrillic letters that browsers displayed as apple.com, which pushed browsers to show such names in their punycode form. In 2021, the Trojan Source paper from the University of Cambridge showed that bidirectional control characters could make source code display differently from how a compiler reads it.

Support