Unicode & Invisible Character Inspector

See the characters you can't see, and clean them up in one click.

Runs locally · nothing uploaded
Text paste, type or drop a file
Fix:
Problems
Visible view invisible characters as badges
Characters
Case notes: Turkish İ and ı

Turkish has four letters i: dotted i / İ (U+0130) and dotless ı (U+0131) / I. So the uppercase of i is İ and the lowercase of I is ı in Turkish.

  • Under the tr-TR culture, "file".ToUpper() returns "FİLE" and "FILE".ToLower() returns "fıle", so culture-sensitive comparisons of identifiers, keys, file extensions and protocol names break (the "Turkey test").
  • For identifiers use ToUpperInvariant() / ToLowerInvariant(), string.Equals(a, b, StringComparison.OrdinalIgnoreCase) and StringComparer.OrdinalIgnoreCase. Keep culture-aware casing for text shown to people.
  • In JavaScript, "İ".toLowerCase() is "i̇": i plus U+0307 COMBINING DOT ABOVE, length 2. Use toLocaleLowerCase("tr") for Turkish text. Case changes can change the length in general, e.g. "ß".toUpperCase() is "SS".

What it does

Paste a string that misbehaves (a password that “is correct”, a command that fails, two names that look equal but are not) and every character is checked as you type.

  • Problems panel lists what was found, with line and column: zero-width characters (ZWSP, ZWNJ, ZWJ, word joiner), a BOM, no-break and other odd spaces, bidirectional controls including unterminated ones (the Trojan Source pattern), soft hyphens, control characters, invisible tag characters with the hidden text decoded, confusable Cyrillic and Greek lookalikes, fullwidth forms, smart punctuation, non-ASCII digits, stacked combining marks, NFC differences, mixed line endings and mojibake such as é or ı.
  • Visible view shows the text with every invisible character as a badge and lookalikes underlined. Click one to select it in the editor.
  • Character table gives each code point: U+ value, name, general category, script, UTF-8 bytes, UTF-16 units and the C# escape. Export it as CSV.
  • Counts for code points, graphemes, UTF-16 units (what string.Length returns) and UTF-8 bytes.

Fix it

One click removes invisible characters, turns odd spaces into normal spaces, normalizes to NFC, replaces confusables or smart punctuation with ASCII, repairs mojibake or unifies line endings. Every fix can be undone. Genuine Russian, Greek or Turkish text is left alone: lookalikes are only flagged inside Latin words or words that imitate them. The case notes explain the Turkish dotted and dotless i (İ, ı) and why .NET identifiers need ToUpperInvariant and ordinal comparisons.

Privacy

Your text never leaves the browser. It is kept in local storage so a refresh doesn’t lose it; use Clear to remove it.