Unicode inspector
See what is really in a piece of text: every code point with its name, and the characters that hide or deceive, from zero-width spaces and Trojan Source bidirectional controls to Cyrillic letters posing as Latin. Look up any code point, find one by name, clean a text and write it as escapes in eight languages.
Codificación y datosRuns in your browser. Nothing you paste leaves the page.
50 code points, 50 UTF-16 units, 58 UTF-8 bytes, 1 line; 4 outside ASCII.
4 code points need a look.
Bidirectional controls left open
Line 1: U+202E U+2066 still open at the end of the line. Everything after them on that line can be displayed in an order different from the order a compiler or parser reads it, which is the Trojan Source pattern (CVE-2021-42574).
What was found
- Bidirectional control: 4Changes the order in which the text around it is displayed. Right-to-left text needs it; in code it can make a line read differently from how it runs (UTS #55).
- Invisible: 4Default_Ignorable_Code_Point: where it is not supported it is simply not rendered at all.
The text, with every hidden character shown
Each character that needs a look is drawn as a tag with its code point; hover or focus it for the name.
Every code point
| At | Line:Col | Char | Code point | Name | Category | Script | Flags |
|---|---|---|---|---|---|---|---|
| 0 | 1:1 | i | Ll | Latn | |||
| 1 | 1:2 | f | Ll | Latn | |||
| 2 | 1:3 | ␣ | Zs | Zyyy | |||
| 3 | 1:4 | a | Ll | Latn | |||
| 4 | 1:5 | c | Ll | Latn | |||
| 5 | 1:6 | c | Ll | Latn | |||
| 6 | 1:7 | e | Ll | Latn | |||
| 7 | 1:8 | s | Ll | Latn | |||
| 8 | 1:9 | s | Ll | Latn | |||
| 9 | 1:10 | _ | Pc | Zyyy | |||
| 10 | 1:11 | l | Ll | Latn | |||
| 11 | 1:12 | e | Ll | Latn | |||
| 12 | 1:13 | v | Ll | Latn | |||
| 13 | 1:14 | e | Ll | Latn | |||
| 14 | 1:15 | l | Ll | Latn | |||
| 15 | 1:16 | ␣ | Zs | Zyyy | |||
| 16 | 1:17 | ! | Po | Zyyy | |||
| 17 | 1:18 | = | Sm | Zyyy | |||
| 18 | 1:19 | ␣ | Zs | Zyyy | |||
| 19 | 1:20 | " | Po | Zyyy | |||
| 20 | 1:21 | u | Ll | Latn | |||
| 21 | 1:22 | s | Ll | Latn | |||
| 22 | 1:23 | e | Ll | Latn | |||
| 23 | 1:24 | r | Ll | Latn | |||
| 24 | 1:25 | - | RIGHT-TO-LEFT OVERRIDE | Cf | Zyyy | Bidirectional control, Invisible | |
| 25 | 1:26 | ␣ | Zs | Zyyy | |||
| 26 | 1:27 | - | LEFT-TO-RIGHT ISOLATE | Cf | Zyyy | Bidirectional control, Invisible | |
| 27 | 1:28 | / | Po | Zyyy | |||
| 28 | 1:29 | / | Po | Zyyy | |||
| 29 | 1:30 | ␣ | Zs | Zyyy | |||
| 30 | 1:31 | C | Lu | Latn | |||
| 31 | 1:32 | h | Ll | Latn | |||
| 32 | 1:33 | e | Ll | Latn | |||
| 33 | 1:34 | c | Ll | Latn | |||
| 34 | 1:35 | k | Ll | Latn | |||
| 35 | 1:36 | ␣ | Zs | Zyyy | |||
| 36 | 1:37 | i | Ll | Latn | |||
| 37 | 1:38 | f | Ll | Latn | |||
| 38 | 1:39 | ␣ | Zs | Zyyy | |||
| 39 | 1:40 | a | Ll | Latn | |||
| 40 | 1:41 | d | Ll | Latn | |||
| 41 | 1:42 | m | Ll | Latn | |||
| 42 | 1:43 | i | Ll | Latn | |||
| 43 | 1:44 | n | Ll | Latn | |||
| 44 | 1:45 | - | POP DIRECTIONAL ISOLATE | Cf | Zyyy | Bidirectional control, Invisible | |
| 45 | 1:46 | ␣ | Zs | Zyyy | |||
| 46 | 1:47 | - | LEFT-TO-RIGHT ISOLATE | Cf | Zyyy | Bidirectional control, Invisible | |
| 47 | 1:48 | " | Po | Zyyy | |||
| 48 | 1:49 | ␣ | Zs | Zyyy | |||
| 49 | 1:50 | { | Ps | Zyyy |
Cleaned copy
Choose what to change. Folding lookalikes also changes genuine words in other scripts, so it is off by default.
4 removed, 0 spaces or line breaks, 0 quotes or dashes, 0 lookalikes replaced.
if access_level != "user // Check if admin " {Write the text as escapes
Every character outside printable ASCII as an escape, and the characters each language reserves escaped too. Each form was decoded back by its own language when this tool was built.
if access_level != \"user\u202E \u2066// Check if admin\u2069 \u2066\" {Referencias
- Unicode Character Database 18.0.0: UnicodeData.txt
- Unicode Character Database 18.0.0: PropList.txt
- Unicode Character Database 18.0.0: DerivedCoreProperties.txt
- Unicode Character Database 18.0.0: extracted/DerivedName.txt
- Unicode Character Database 18.0.0: NameAliases.txt
- Unicode Character Database 18.0.0: Blocks.txt
- Unicode Character Database 18.0.0: DerivedAge.txt
- Unicode Character Database 18.0.0: Scripts.txt and ScriptExtensions.txt
- Unicode Character Database 18.0.0: LineBreak.txt
- UTS #39 Unicode Security Mechanisms 18.0.0: confusables.txt
- Unicode Technical Standard #39: Unicode Security Mechanisms (version 18.0.0)
- Unicode Character Database 18.0.0: PropList.txt (Bidi_Control)
- Unicode Technical Standard #55: Unicode Source Code Handling (version 2)
- Unicode Standard Annex #9: Unicode Bidirectional Algorithm (Unicode 18.0.0)
- Unicode Standard Annex #44: Unicode Character Database (Unicode 18.0.0)
- The Unicode Standard 18.0.0, chapter 4: Character Properties
- NVD: CVE-2021-42574 (Trojan Source, bidirectional reordering in source code)
- RFC 3629: UTF-8, a transformation format of ISO 10646
- RFC 2781: UTF-16, an encoding of ISO 10646
- RFC 8259: JSON (section 7, strings)
- ECMA-262: ECMAScript Language Specification (string literals)
- The Python Language Reference: Lexical analysis (escape sequences)
- ISO/IEC 9899:2011 committee draft N1570 (C11): 6.4.3 universal character names
- Tcl 8.4 manual: Tcl (backslash substitution)
- WHATWG HTML Living Standard: named character references (entities.json)
- RFC 3986: URI Generic Syntax (percent-encoding)