yet another
Unicode Converter
One box, every format. Convert Unicode text to code points, UTF-8 and UTF-16 code units, escape sequences and HTML entities, and back again.
Paste characters or any mix of escapes: U+00E9, \u00E9, \u{1F600}, é, 0xE9, %C3%A9, CSS escapes and more.
Characters
The decoded characters.
XML/HTML entities
Markup-significant characters as entities.
Hex NCRs
Hexadecimal numeric character references.
Decimal NCRs
Decimal numeric character references.
JavaScript / Java
Escape sequences for JavaScript and Java source.
Rust
Rust string escape sequences.
Perl
Perl \x{...} escape sequences.
CSS
CSS escapes, e.g. for the content property.
Percent-encoded
UTF-8 percent-encoding for URLs.
Unicode U+ notation
Code points in U+ notation.
0x notation
Code points with 0x prefix.
UTF-8 code units
Hex bytes of the UTF-8 encoding.
UTF-16 code units
Hex code units of the UTF-16 encoding.
Hex code points
Space-separated hexadecimal code points.
Decimal code points
Space-separated decimal code points.
Help
Paste text in any mix of formats: plain characters, U+00E9, \u00E9, \u{1F600}, é, é, 0xE9, %C3%A9 or CSS escapes. Everything decodes to characters first, then converts into every box below.
Treat bare numbers as decides what to do with bare numbers like 0915: leave them alone (Just numbers), or read them as hex code points, decimal code points, UTF-8 code units or UTF-16 code units. In hex mode a word like cafe counts as a number.
Convert \n etc reads backslash escapes such as \n and \t as real control characters. It is on by default; turn it off when the text is source code that should stay as typed.
Extract escapes deletes everything except the escapes, so a sentence with U+0A73 in it becomes just U+0A73. If Treat bare numbers as is set to hex or decimal code points, bare numbers survive the extraction too. It does not catch \n-style single-letter escapes or named entities such as é.
As output
The decoded result as plain characters. Look here to check what your escapes actually say.
Click Inspect to open the character inspector: code point, Unicode name, block, category and script for every character, looked up locally in your browser.
As input
Treated as plain text. U+1234 typed here is five characters, not an escape.
As output
Markup-significant characters become entities: & < > ". With Escape invisible characters on (the default), invisible characters such as NO-BREAK SPACE or RIGHT-TO-LEFT MARK also become hex NCRs. Convert bidi controls to HTML markup rewrites bidi controls as span tags with dir attributes.
As input
Paste HTML or XML markup. Entities and numeric character references decode to characters.
As output
Every non-ASCII character as a hexadecimal numeric character reference: é becomes é. Turn off Keep ASCII to convert ASCII characters too.
As input
A mix of text and &#x...; references. Only the hex references decode.
As output
The same idea in decimal: é becomes é. Turn off Keep ASCII to convert ASCII characters too.
As input
A mix of text and &#...; references. Only the decimal references decode.
As output
Non-ASCII characters as JavaScript escapes. ES6 \u{...} is the default and keeps emoji as one code point: 😀 becomes \u{1F600}. Uncheck it for surrogate pairs (\uD83D\uDE00), or check C-style for an eight-digit \U0001f600. Escape \n \t quotes also escapes line feeds, tabs and quote marks.
As input
A mix of text and escapes: \u{1F600}, \u1234, \U0001F600, \x41 and \n-style single-letter escapes.
As output
Non-ASCII characters as \u{...} escapes; invisible control characters as \xXX. Escape \n \t quotes also escapes line feeds, tabs and quote marks.
As input
A mix of text and \u{...}, \xXX and \n-style escapes.
As output
Non-ASCII characters as \x{...} escapes; invisible control characters as \xXX. Escape \n \t quotes also escapes line feeds, tabs and quote marks.
As input
A mix of text and \x{...}, \xXX and \n-style escapes.
As output
CSS escapes, handy for the content property: four hex digits for BMP characters (\00E9 ), six for supplementary ones (\01F600 ), each followed by a space.
As input
A mix of text and CSS escapes.
As output
UTF-8 percent-encoding for URLs: é becomes %C3%A9. Letters, digits and - . _ ~ stay as they are.
As input
Percent escapes only; everything else stays as typed.
As output
Code points in U+ notation: é becomes U+00E9. ASCII characters stay as text unless you uncheck Keep ASCII.
As input
A mix of text and U+hex escapes. Only the escapes decode.
Separate adds spaces between codes that run together, so U+0041U+0042 becomes U+0041 U+0042. It only reformats this box.
After Separate, clicking Convert on this box carries the extra spaces into the result, so the round trip is no longer exact. To split a run of characters into spaced codes: convert from the main input, click Separate then Convert here, and read the Characters panel.
As output
Code points with a 0x prefix: é becomes 0xE9. ASCII characters stay as text unless you uncheck Keep ASCII.
As input
A mix of text and 0x escapes. Only the escapes decode.
Separate adds spaces between codes that run together, so 0xE90x2B becomes 0xE9 0x2B. It only reformats this box.
After Separate, clicking Convert on this box carries the extra spaces into the result, so the round trip is no longer exact. To split a run of characters into spaced codes: convert from the main input, click Separate then Convert here, and read the Characters panel.
As output
The UTF-8 bytes of your text as two-digit hex pairs: é becomes C3 A9.
As input
Hex byte codes separated by spaces. Nothing else.
As output
UTF-16 code units as four-digit hex: 😀 becomes D83D DE00, one surrogate pair.
As input
Hex code units separated by spaces. Nothing else.
As output
Hexadecimal code points separated by spaces: é becomes 00E9 with the default padding of 4. Pad to digits pads with leading zeros; Keep ASCII leaves ASCII characters as text mixed into the numbers.
As input
Hex numbers. With Keep ASCII off, separate them with spaces. Beware: a word like cafe reads as a hex number.
Keep hex numbers spaced away from letters too: in W3C202C the digits read as one number, 3C202C, which sits beyond the Unicode range.
As output
Decimal code points separated by spaces: é becomes 233. Keep ASCII leaves ASCII characters as text mixed into the numbers.
As input
Decimal numbers. With Keep ASCII off, separate them with spaces.
Be careful converting a mix of text and numbers from this box. A number needs a space or clear punctuation around it to be recognized, and any extra spaces already in the box carry through into the results.
what
What is a Unicode converter?
Every character on your screen is stored as a number. The letter é is code point U+00E9. In UTF-8 it travels as two bytes, C3 A9. In a JavaScript string it appears as \u00E9, in an HTML file as é, and in a URL as %C3%A9.
This Unicode text converter turns any one of these forms into all the others: U+ and 0x notation, UTF-8 and UTF-16 code units, numeric character references, percent-encoding, and escape syntax for JavaScript, CSS, Rust and Perl. Every panel works in reverse too, so you can paste escapes into any box and read the decoded characters.
Everything runs locally in your browser. The text you paste never leaves the page.
Read more: What is Unicode? Code points, planes, and why é is U+00E9
how
How to use the converter
- 01
Paste your input
Drop characters or any mix of escape formats into the input box. Results update as you type, no button needed.
- 02
Pick the format you need
Each panel shows the same content in a different notation. Hit Copy on the one you want.
- 03
Convert in reverse
Edit any panel and press its Convert button to use that panel as the source. Everything else updates from it.
- 04
Handle bare numbers
If your input mixes text with raw numbers, set Treat bare numbers as so the tool reads them as hex, decimal, UTF-8 bytes or UTF-16 units.
- 05
Tune each format
Panels carry their own switches: Keep ASCII, ES6 braces, padding width, bidi handling. Flip one and the output rewrites itself.
- 06
Rescue tricky input
Extract escapes strips a paste down to its escapes only. Separate spaces out run-together U+ or 0x codes. Inspect opens a per-character report with names, blocks and scripts.
Read more: How our Unicode text converter works under the hood
Why
Why you might need a Unicode converter
Fix mojibake
When café shows up as café, something decoded UTF-8 bytes as Latin-1. The UTF-8 panel shows you the actual bytes so you can prove which encoding broke.
Write internationalized code
Grab \u00E9-style escapes for JavaScript or Java source, or \u{...} sequences for Rust, without leaving the browser.
Style glyphs in CSS
The content property needs escapes like \2665. The CSS panel produces exactly that, trailing space included.
Debug URLs
Percent-encoding shows how non-ASCII characters travel through links and query strings, byte by byte.
See invisible characters
Zero-width spaces and bidi control marks are real characters that render as nothing. The code point panels make them visible.
Identify unknown characters
What is this character, exactly? Click Inspect on the Characters panel and every glyph gets its Unicode name, block, category and script.
FAQ
Frequently asked questions
What is the difference between a code point and a code unit?
A code point is the number Unicode assigns to a character, written like U+00E9. A code unit is how that number is stored in a specific encoding. UTF-16 stores characters beyond U+FFFF as two code units called a surrogate pair, so the emoji U+1F600 becomes D83D DE00.
What is the difference between UTF-8 and UTF-16?
UTF-8 is the wire format of the web: ASCII stays one byte and other characters take two to four. UTF-16 is what JavaScript, Java and Windows use in memory. When you see \uXXXX escapes in source code, you are looking at UTF-16 code units.
Why does one emoji show up as two code units?
Anything above U+FFFF does not fit in a single 16-bit unit, so UTF-16 splits it into a lead and a trail surrogate. The emoji itself is still one code point; only its storage is split.
Can I turn \uXXXX escapes back into readable text?
Yes. Paste them into the input box, or into the JavaScript panel and press its Convert button. The Characters panel shows the decoded text.
What are HTML entities and NCRs?
Both write characters as ASCII-safe markup. Named entities use names like & and é. Numeric character references use the code point instead: é in hexadecimal or é in decimal. Browsers render all three identically.
How do I find the name of a character?
Paste it into the input box, then click Inspect on the Characters panel. Each character comes back with its code point, official Unicode name, block, general category and script, all looked up locally in your browser.
What is the difference between UTF-8 and percent-encoding?
Percent-encoding is UTF-8 with a % sign in front of each byte. The letter é is two UTF-8 bytes, C3 A9, and travels in a URL as %C3%A9. The UTF-8 panel shows the bytes; the Percent-encoded panel shows the URL form.
Does this tool send my text to a server?
No. All conversion runs in your browser with JavaScript. Nothing you paste is uploaded, logged or stored.
Is this Unicode converter free?
Yes. It is free to use, with no sign-up and no limits.
further reading
Authoritative Unicode references
unicode.org
The Unicode Standard
The full text of the current standard. Start here when a blog post is not enough.
Visit unicode.orgunicode.org
Unicode Code Charts
Every assigned code point, block by block, with glyphs and formal names.
Visit unicode.orgunicode.org
Unicode Character Database
The machine-readable character properties this site's data files are built from.
Visit unicode.orgunicode.org
Unicode Glossary
Official definitions of code point, code unit, scalar value, plane and friends.
Visit unicode.orgunicode.org
Unicode FAQ
The consortium's own answers on UTF-8 versus UTF-16, BOMs, surrogates and more.
Visit unicode.orgietf
RFC 3629: UTF-8
The four-page Internet standard that defines UTF-8 byte sequences.
Visit ietfwhatwg
Encoding Standard
How browsers must decode and encode text. UTF-8 wins, legacy encodings are mapped.
Visit whatwg