UTF-8 Decoder
Decode UTF-8 bytes to readable text instantly. Paste bytes as hex (48 65 6c 6c 6f) or as percent-encoding (%48%65) and the decoder interprets them as UTF-8. Toggle to Encode to see a string's UTF-8 bytes. Everything runs in your browser — nothing is uploaded.
How to decode UTF-8 bytes to text
Paste your UTF-8 bytes above and the decoder converts them to readable text instantly. It accepts two formats: hex bytes like 48 65 6c 6c 6f (spaces, colons, and 0x prefixes are ignored) and percent-encoding like %48%65. In both cases the bytes are interpreted as UTF-8 and the text appears — for example, all of those decode to Hello. Click Copy to grab the result.
UTF-8, hex, and percent-encoding
UTF-8 is how text becomes bytes: each character maps to one or more bytes. Those bytes can be written many ways. This decoder accepts the two most common: hex, where each byte is two hex digits (used everywhere from hashes to hex dumps — see the Hex Decoder), and percent-encoding, where each byte is written as % followed by two hex digits (used in URLs — see the URL Decoder). If the input contains a %XX sequence, it is percent-decoded; otherwise it is treated as hex.
Is this private?
Yes. The decoding runs fully in the browser with JavaScript — your bytes are parsed and decoded locally and nothing is uploaded to any server. You can confirm in DevTools → Network: decoding fires no request.
Frequently asked questions
How do I decode UTF-8 encoded text?
Paste the UTF-8 bytes into the input above. It accepts either hex bytes (like 48 65 6c 6c 6f) or percent-encoding (like %48%65), parses them locally, and interprets the bytes as UTF-8 to show the readable text. Click Copy to grab it.
What input formats does this accept?
Two formats. If the input contains percent-encoding such as %48%65, it is percent-decoded. Otherwise the input is treated as hex bytes — spaces, colons, and 0x prefixes are ignored — and decoded as UTF-8.
How do I see the UTF-8 bytes of a string?
Click the Decode button to switch it to Encode, then type or paste your text. The tool shows the UTF-8 bytes of that string as spaced lowercase hex, two digits per byte.
Why did decoding fail?
The input wasn't valid UTF-8 hex bytes or percent-encoding — a typo, an odd number of hex digits, or bytes that aren't a valid UTF-8 sequence (often binary data, which has no text form). Check the input matches a form like 48 65 6c 6c 6f or %48%65.
Need plain Base64 encode/decode?
The main base64.dev tool handles text, files, and URL-safe mode with auto-detect.
Open base64.dev →