Unicode Converter
Text ↔ \uXXXX escapes, plus a per-character code-point inspector
| Char | Code point | UTF-8 bytes |
|---|
What Is a Unicode Converter?
Every character is a number underneath: letters, accents, Chinese characters and emoji each own a Unicode code point, and UTF-8 encodes those numbers into bytes for storage and transit. That layer surfaces when JSON shows backslash-u escapes instead of text, mail arrives as mojibake, or an emoji breaks a legacy pipeline. This tool crosses the layer both ways — plain text becomes backslash-uXXXX escapes and escapes resolve back to readable text — while a live inspector breaks input down per character with its U-plus code point, decimal value and actual UTF-8 bytes. Conversion is immediate, with the table refreshing as you type, so a hunch about a garbled string resolves in seconds.
Escapes and the code-point inspector
- 🔄 Text to backslash-u escapes for non-ASCII and control chars, and back again
- 🔍 Per-character table: U-plus notation, decimal value, raw UTF-8 bytes
- 🔢 Correct past the basic plane, iterating by code point so emoji stay whole
- ⚡ Live inspection per keystroke with clear to reset both panes
Encoding puzzles it untangles
- Diagnosing database or email text rendered as gibberish
- Authoring JSON escapes for non-ASCII content or reading escaped payloads
- Showing which bytes an emoji or CJK character occupies in a file
Candid limits: only non-ASCII and control characters are escaped, so plain English stays readable, and lone surrogates decode to a code unit rather than a valid character. Everything runs locally with no uploads, keeping source strings and proprietary content on your machine.
Last updated · 2026-09-01
Code points, surrogates and UTF-8 widths
- U+1F600 is one character, two UTF-16 units (surrogate pair), four UTF-8 bytes — three lengths for one emoji.
- \uXXXX escapes encode UTF-16; \u{...} encodes full code points — the wrong language silently splits emoji.
- The byte view shows exactly what storage and network layers will see.
One character is not one byte
Escapes both ways
Plain text becomes \uXXXX sequences with uppercase four-digit hex, while printable ASCII passes through untouched; pasting escapes back in converts them to characters again.
Character-by-character inspector
Every code point in your string is listed with its U+XXXX form, its decimal value and its raw UTF-8 bytes — emoji, Chinese characters and control codes included, up to the first 200.
For decoding mojibake
When a JSON payload shows \u4f60\u597d instead of text, paste it here to read the real string, or flip any garbled output into escapes to see exactly which bytes are wrong.
Frequently asked questions
What's the difference between a code point and a UTF-16 code unit?⌄
Most characters fit in one 16-bit code unit, but characters outside the Basic Multilingual Plane (many emoji, for example) need two — a "surrogate pair". The inspector reads by code point, so those show up correctly as one row, not two.
Why would I need \uXXXX escapes?⌄
They're the standard way to represent non-ASCII characters inside JSON strings, JavaScript string literals, and many config/property file formats that don't accept raw UTF-8 text.
Is my text uploaded anywhere?⌄
No. Character inspection and conversion run locally - the tool reads the code points already in your browser and shows them without any network request.
Why does my emoji show as two strange boxes in some logs?⌄
The logger printed the surrogate pair as two separate escapes (D83D DE00). Anything treating them independently breaks them apart; combine them or switch to code-point escapes like \u{1F600} and the face returns intact.