Hex to UTF-8 Converter

Client-sideNo sign-upFree

Decode a hex string into UTF-8 text, or encode text into hex - handles multi-byte characters correctly.

Quick facts

Category
Converters
Best for
Decoding a hex-encoded payload (from a hash, log, or hex dump) back into readable text
Hex input
✓ 5 bytes
Decoded text
Hello
Hex digits are read two at a time as raw bytes, then decoded as UTF-8 - not one big number, so this handles multi-byte characters correctly (e.g. "E282AC" decodes to the euro sign "€", a single 3-byte character). Spaces and a leading "0x" are stripped automatically, but a contiguous hex string like "48656C6C6F" works too. Odd-length hex is rejected, since a byte is always two hex digits.
In-content slot
Was this tool helpful?
On this page

Overview

Decode a hex string into readable UTF-8 text, or run the reverse and encode text into hex. This is not a number-base conversion - a hex string here represents a sequence of raw bytes (each pair of hex digits is one byte), not one large hex integer, so decoding reads it two digits at a time into a byte array and then runs that array through the browser's native `TextDecoder` in strict UTF-8 mode. That matters because UTF-8 is variable-width: a character like the euro sign "€" takes three bytes ("E282AC"), and many emoji take four, so converting hex digit-pairs one at a time as if each were its own character would silently produce garbage the moment a multi-byte character shows up. Invalid hex (non-hex characters, odd digit count) and valid-hex-but-invalid-UTF-8 byte sequences are reported as two distinct, specific errors rather than one vague failure. Accepts a contiguous hex string ("48656C6C6F"), one with spaces, or a "0x"-prefixed value - all equivalent. Runs entirely client-side.

Best for: Decoding a hex-encoded payload (from a hash, log, or hex dump) back into readable text

How to use this tool

  1. Choose a direction. Hex to UTF-8 text, or text to hex.
  2. Paste your hex or text. Hex can be contiguous, spaced, or 0x-prefixed - all are normalized automatically.
  3. Read two digits as one byte. Each hex pair becomes a raw byte; the full byte sequence is then decoded as UTF-8.
  4. See the result and byte count. Decoded text (or hex output) appears immediately, along with the number of bytes involved.

Frequently asked questions

A hex-encoded string represents a sequence of independent bytes, not a single numeric value - "48656C6C6F" is the five bytes 48, 65, 6C, 6C, 6F (spelling "Hello" in ASCII), not the huge integer you'd get parsing the whole string as one hex number. Number-base converters intentionally do the latter; this tool does the former, since that's what hex means when it's standing in for text or binary data.

It's handled correctly: "E282AC" (three bytes) decodes to the single euro sign character "€", and a 4-byte emoji sequence decodes to one emoji - because decoding runs the full byte array through `TextDecoder`, which understands UTF-8's variable-width encoding, rather than converting each byte to a character on its own.

It's rejected immediately with a specific error, since a byte is always two hex digits - an odd count means the input is truncated or malformed, and guessing how to pad it would risk decoding the wrong bytes.

Explore more free tools

Formatters, converters, validators, and generators - all free and running entirely in your browser.

Browse more tools