Three encoding families, six directions. Turn text into \uXXXX Unicode escapes, HTML entities (named, numeric or hex) or ASCII codes — and turn each one back, losslessly. Surrogate pairs rejoin into emoji, the full HTML5 entity set decodes, and anything out of range is counted rather than corrupted. Live on every keystroke, entirely in your tab — nothing is uploaded, nothing is stored.
Writes every character as a \uXXXX escape — the syntax JavaScript, JSON and many source files use to carry non-ASCII safely through ASCII-only channels. Characters above U+FFFF become surrogate pairs (👋 → \ud83d\udc4b), exactly as UTF-16 stores them. By default only non-ASCII is escaped, keeping the output readable; flip ∀ escape ASCII too to encode every single character.
Example
سلام Hello 世界 👋
↓
\u0633\u0644\u0627\u0645 Hello \u4e16\u754c \ud83d\udc4b
Persian, CJK and an emoji — ASCII stays readable.
Use it for source codeJSON payloadsi18n filessafe literals
The trip home. Reads both the classic \uXXXX form and the modern \u{…} brace form, and rejoins adjacent surrogate pairs back into single emoji and astral characters. Anything malformed is left exactly as written and counted in the Left as-is stat, so a partially-corrupted dump still decodes as far as it can.
Use it for escaped dumpsde-obfuscationdebugging JSONreading logs
Makes text safe to drop into HTML. The five dangerous characters — & < > " ' — are always escaped, because they're the ones that break markup or open XSS holes. Non-ASCII is then rendered in the style you pick from the deck: named (é) for readability, numeric (é) or hex (é) for full coverage — anything without a common name falls back to numeric even in named mode.
Use it for embedding markupXSS-safe outputemail HTMLCMS content
Turns entities back into characters — and because it leans on the browser's own parser, it understands the entire HTML5 named-entity set (all two thousand-plus), plus every numeric and hex form. Unknown or malformed entities are left untouched and counted, so you always know exactly how much of the input didn't decode.
Example
<b>Café</b> & bar — ♥ ✨
↓
<b>Café</b> & bar — ♥ ✨
named, hex-free named, and numeric all in one pass.
Use it for encoded HTMLCMS exportsscraped textemail source
Maps each character to its decimal ASCII code, space-separated — the lowest-common-denominator view of your text. Anything beyond code 127 has no ASCII representation, so it's marked with ? and tallied in the Out of range stat rather than silently mangled. Newlines, tabs and every control character get their real codes.
Example
ABC
Hi!
↓
65 66 67 10 72 105 33
the 10 is the newline — nothing is lost.
Use it for protocol debuggingteachingserial datalow-level inspection
Reads a run of numbers and turns them back into text. Accepts spaces, commas, semicolons or newlines as separators, so a dump from any tool can be pasted straight in. Tokens that aren't valid ASCII codes (too big, not a number) are skipped and counted in the Invalid tokens stat instead of stopping the run.
Example
72 101 108 108 111 44 32 87 111 114 108 100 33
↓
Hello, World!
13 codes in, 13 characters out.
Use it for reading dumpswire tracespuzzle inputsdata recovery
Encoding rules · all six tools are UTF-8 and UTF-16 aware — Persian, CJK and emoji survive every round trip · Unicode encoding writes \uXXXX per UTF-16 unit, so astral characters appear as surrogate pairs; the decoder rejoins them and also reads the \u{…} brace form · HTML entity encoding always escapes & < > " ' and renders other non-ASCII as named, numeric or hex per the deck · HTML entity decoding understands the full HTML5 named set plus numeric and hex, and counts anything it can't recognize · ASCII covers codes 0–127; out-of-range characters are marked and counted, never dropped silently · round trips are lossless in every family · ⇄ Output → Input feeds any result straight back for the return trip
The privacy promise
Encode anything. We couldn't read it even if we wanted to.
This page has no backend and no database. Every escape written, every entity matched and every code mapped just now was computed by JavaScript inside your own browser tab — your text never traveled a single centimeter of cable. Close the page and it's gone for good.
RAW TEXT→ENCODED IN YOUR BROWSER→SAFE TO SHIP
✕ SERVER · DATABASE · LOGS · ANALYTICS
Databasenull
Backendnone
Text uploads0
Session logs0
Questions
Asked often, answered plainly.
( 02 )
What's the difference between Unicode escapes and HTML entities?
They solve the same problem in different contexts. \uXXXX is the escape syntax of JavaScript, JSON and many source files — the language runtime interprets it. &…; is the escape syntax of HTML and XML — the markup parser interprets it. A \u00e9 inside an HTML page is just literal text on screen; you'd need é (or é) there instead. Pick the family that matches where the text will be parsed.
Why does my emoji become two \uXXXX groups?
Because JavaScript strings are UTF-16, and characters above U+FFFF — emoji, many CJK ideographs, historic scripts — don't fit in a single 16-bit unit. They're stored as a surrogate pair, so the encoder writes both halves: 👋 becomes \ud83d\udc4b. The decoder rejoins them automatically, and the \u{1F44B} brace form expresses the same character as one code point if you prefer that style.
Named, numeric or hex entities — which should I use?
All three decode to the same character, so it's a readability-versus-coverage trade-off. Named entities (é) are the most readable but only exist for a subset of characters. Numeric (é) and hex (é) cover every Unicode code point with no ambiguity. The encoder lets you pick; anything without a common name falls back to numeric even in named mode, so you never lose a character.
Why do some characters become ? in the ASCII output?
Because ASCII only defines codes 0–127 — English letters, digits, punctuation and control characters. Anything beyond that — é, س, ★, emoji — has no ASCII code, so the encoder marks it with ? and counts it in the Out of range stat rather than pretending. Use the Unicode tools if those characters need to survive the trip.
Is my data saved anywhere?
No. IrisTool has no backend and no database. Encoding happens inside your browser tab and the text disappears the moment you close or refresh the page. There is nothing to leak, because nothing is ever collected.