UTILS.
100% in-browser
🔤

Unicode Character Inspector

Break any string into code points and show each one's U+ hex, category, block, UTF-8/UTF-16 bytes, HTML entity, JS escape, percent-encoding, and flags.

Enter text above to inspect each character.

About this tool

The Unicode Character Inspector splits a string into its individual code points and shows everything about each one. It iterates by code point (not by 16-bit unit), so astral characters and emoji made of surrogate pairs are handled correctly. For every code point you get the glyph, its U+XXXX hex value, the decimal value, a name for well-known characters, the general category, and the Unicode block it belongs to.

All analysis is derived algorithmically in your browser and nothing is uploaded. The encodings are computed from first principles: the UTF-8 bytes follow the 1-to-4-byte encoding rules, the UTF-16 code units are a single unit in the BMP or a high/low surrogate pair (D800–DBFF / DC00–DFFF) above it, the HTML numeric entity is &#nnnn;, the JavaScript escape is \uXXXX for the BMP or \u{XXXXX} for astral code points, and the percent-encoding is the UTF-8 bytes written as %XX. The general category (Lu, Ll, Nd, Mn, Zs, Cc, and so on) is detected with Unicode property-escape regular expressions.

The inspector flags characters that often cause bugs or are used to hide text: zero-width characters (200B–200D, 2060, FEFF), bidirectional controls (200E, 200F, 202A–202E, 2066–2069), combining marks, and C0/C1 control characters — these are shown as a dot so invisible content becomes visible. A summary line reports the code-point count, the UTF-16 length (String.length), and the total UTF-8 byte count. This tool is for inspection; to normalize between NFC and NFD use the Unicode normalizer. Copy the full breakdown as tab-separated text.

Frequently asked questions

Why does an emoji count as one entry but length 2?
Many emoji and all characters above U+FFFF are single code points encoded in UTF-16 as a surrogate pair — two 16-bit units. The inspector iterates by code point, so it shows one row, while JavaScript's String.length counts the two units, which the summary reports separately.
How are the UTF-8 and UTF-16 bytes derived?
They are computed directly from the code point: UTF-8 uses the standard 1–4 byte rules, and UTF-16 is one unit for BMP characters or a high+low surrogate pair (D800–DBFF then DC00–DFFF) for astral ones. The percent-encoding is simply those UTF-8 bytes as %XX.
What do the flags mean?
They highlight easy-to-miss characters: zero-width (200B–200D, 2060, FEFF), bidirectional controls that can reorder text, combining marks that attach to a previous letter, and control characters. Such characters are displayed as a middle dot so hidden or invisible content is revealed.
Does it show the official Unicode character name?
It names well-known characters (control codes, spaces, zero-width and bidi controls) and always shows the Unicode block and general category for every code point. Full per-character names from the Unicode database are not bundled, so the block name serves as the descriptor otherwise.

More tools