UTF-8 Encoder/Decoder

Convert text to percent-escaped UTF-8 byte sequences, and back again

Plain text

Percent-escaped UTF-8

Nothing you enter here is ever sent anywhere — encoding and decoding happen entirely in your browser.

About this tool

UTF-8 is the dominant encoding for representing Unicode text as raw bytes, using between one and four bytes per character depending on the code point. This tool takes text, breaks it down into its raw UTF-8 bytes, and writes each byte out as a percent-escaped hex pair like %E2%9C%93 — every single byte gets escaped, not just the ones outside the ASCII range. That's different from ordinary URL-encoding, which only escapes reserved or unsafe characters and leaves plain ASCII letters and digits alone. Decoding reverses the process, turning a percent-escaped byte sequence back into the original text.

How is this different from regular URL encoding?

Standard URL encoding (like encodeURIComponent) only escapes characters that are unsafe or reserved in a URL, leaving letters, digits, and a few symbols untouched. This tool instead escapes every byte of the UTF-8 representation, including plain ASCII letters, so you can see the exact byte-level structure.

Why does one character sometimes turn into multiple %XX groups?

UTF-8 uses a variable number of bytes per character — 1 byte for basic ASCII, up to 4 bytes for characters like emoji or many non-Latin scripts. Each of those bytes is shown as its own %XX hex group in the encoded output.

What happens if I try to decode an invalid byte sequence?

If the percent-escaped input doesn't form valid UTF-8 byte sequences, decoding fails and the tool shows an error banner instead of garbled or incorrect text.