BackendBench
Coffee
Free tool

Unicode inspector

Paste text to see every code point, hidden characters, encodings and why the lengths disagree.

CharCode pointName / categoryUTF-8UTF-16JavaNotes

Normalization

See what is really in a string

Some of the most baffling bugs are text bugs. Two strings that look identical compare unequal. A username with trailing "nothing" fails to match. A database column rejects an emoji. A name that is 10 characters on screen is 12 in Java and 25 bytes on the wire. The cause is always the same: what you see is not what is stored, and the difference is invisible without a tool.

Paste or type text and the inspector lists every code point with its U+ number, UTF-8 bytes, UTF-16 units, Java and JavaScript escapes and HTML entity, general category and, for common characters, its official name. It flags invisible characters (zero-width spaces and joiners, the byte order mark, soft hyphens), non-breaking spaces that look like spaces, bidirectional controls used in Trojan Source attacks, combining marks, and Cyrillic and Greek letters that look like Latin ones. A summary compares the count of grapheme clusters, code points, UTF-16 units (Java's length()) and UTF-8 bytes, and shows how the text changes under NFC, NFD, NFKC and NFKD normalization. One click removes the invisible characters.

Advice for developers

Names are shown for a curated set of characters that cause trouble in practice; the rest show their category. The analysis runs in your browser.

Frequently asked questions

Why does "length" differ from what I see?

A character on screen (a grapheme) can be several code points (an e plus a combining accent, a family emoji joined with zero-width joiners), and each code point can be one or two UTF-16 units. Java's String.length() counts UTF-16 units, codePointCount counts code points and users count graphemes.

What are zero-width characters and why do they matter?

Characters such as ZERO WIDTH SPACE (U+200B) are invisible but real. They sneak into copied text and break comparisons, identifiers, URLs, passwords and JSON keys, and are used to fingerprint leaked text.

What is the Trojan Source attack?

Bidirectional control characters (U+202A to U+202E and U+2066 to U+2069) can make source code display in a different order than it executes, hiding malicious logic in code review. Compilers and editors increasingly warn about them.

What is Unicode normalization?

The same visible text can have different code point sequences: "é" as one code point (NFC) or e plus a combining accent (NFD). Normalize both sides (java.text.Normalizer) before comparing or hashing strings.

More tools you might need