
UTF8 Decoder
The UTF-8 Decoder lets you convert UTF-8 encoded hex strings back into readable text. This tool is especially helpful for debugging encoded logs, analyzing communication packets, and interpreting binary data.
For encoding readable text into UTF-8 hex, try our UTF-8 Encoder. You can also explore our Base64 Decoder and URL Decoder if your data is encoded differently.
UTF8 Decoder - Documentation
What is UTF-8 Decoding?
UTF-8 decoding is the process of converting a sequence of hexadecimal bytes (encoded using UTF-8) back into human-readable text.
UTF-8 (Unicode Transformation Format - 8 bit) is the most widely used character encoding format on the web. Every symbol, letter, emoji, or number in UTF-8 has a unique binary or hex representation.
This UTF8 Decoder helps you reverse this encoding, by pasting a UTF-8 hex string like 48 65 6c 6c 6f, you'll see the readable version: Hello.
How Does UTF-8 Decoding Work?
UTF-8 is a variable-length binary encoding format used to represent text in digital systems. Every character, whether it's a simple letter like A or a special symbol like ✓, has a corresponding Unicode code point, which gets encoded into bytes using UTF-8 rules.
Step by Step:
You provide a sequence of hex bytes (like
48 65 6C 6C 6F)Each pair of hex characters represents 1 byte (8 bits)
The decoder converts hex to binary, groups bytes according to UTF-8 rules, and maps them to their corresponding Unicode characters
You get the decoded output as readable text
Example:
Hex: 48 65 6C 6C 6F
Binary: 01001000 01100101 01101100 01101100 01101111
UTF-8 Mapping: ['H', 'e', 'l', 'l', 'o']
Output: HelloUTF-8 is variable-length:
ASCII characters = 1 byte
Latin/Greek symbols = 2 bytes
Most CJK characters = 3 bytes
Emojis and rare scripts = 4 bytes
UTF-8 Decoding Reference Table
Use this reference to quickly identify common UTF-8 hex sequences and their decoded characters:
Character | Description | Code Point | UTF-8 Hex | Bytes |
|---|---|---|---|---|
A | Latin capital A | U+0041 | 41 | 1 |
a | Latin small a | U+0061 | 61 | 1 |
0 | Digit zero | U+0030 | 30 | 1 |
(space) | Space character | U+0020 | 20 | 1 |
© | Copyright sign | U+00A9 | C2 A9 | 2 |
é | Latin small e with acute | U+00E9 | C3 A9 | 2 |
ü | Latin small u with diaeresis | U+00FC | C3 BC | 2 |
€ | Euro sign | U+20AC | E2 82 AC | 3 |
✓ | Check mark | U+2713 | E2 9C 93 | 3 |
✔ | Heavy check mark | U+2714 | E2 9C 94 | 3 |
中 | CJK "middle" | U+4E2D | E4 B8 AD | 3 |
𝄞 | Musical symbol G clef | U+1D11E | F0 9D 84 9E | 4 |
🚀 | Rocket emoji | U+1F680 | F0 9F 9A 80 | 4 |
UTF-8 Byte Structure Rules
Byte Count | Byte 1 | Byte 2 | Byte 3 | Byte 4 |
|---|---|---|---|---|
1-byte (ASCII) | 0xxxxxxx | - | - | - |
2-byte | 110xxxxx | 10xxxxxx | - | - |
3-byte | 1110xxxx | 10xxxxxx | 10xxxxxx | - |
4-byte | 11110xxx | 10xxxxxx | 10xxxxxx | 10xxxxxx |
Each x represents a bit from the character's Unicode code point. The leading bits of the first byte indicate how many bytes make up the sequence.
Practical Real-World Examples
Decoding Encoded Email Headers
Many email headers are encoded in UTF-8 for safe transmission. Extract the hex and paste it here to decode the actual subject line.Hex Input: 53 75 62 6a 65 63 74 3a 20 57 65 6c 63 6f 6d 65 21 Decoded: Subject: Welcome!Analyzing Logs from IoT Devices or APIs
Devices often store text messages or alerts in hex format.Hex Input: 41 6c 65 72 74 3a 20 e2 9c 94 Decoded: Alert: ✔Decoding Malware Signatures or Packet Data
Security analysts examine memory dumps or pcap files where strings are stored in hex form.
Hex: 55 73 65 72 3a 20 61 64 6d 69 6e Output: User: admin
UTF-8 Decoding in Multiple Programming Languages
Need to decode UTF-8 in code? Here are production-ready examples in the most popular languages:
Python: bytes.decode('utf-8')
# Decode UTF-8 bytes to string
encoded = b'\xc3\xa9\xc3\xa0\xc3\xbc'
decoded = encoded.decode('utf-8')
print(decoded) # Output: eaue with accents
# Decode hex string to text
hex_string = "48 65 6c 6c 6f"
byte_data = bytes.fromhex(hex_string.replace(" ", ""))
text = byte_data.decode('utf-8')
print(text) # Output: Hello
# Handle errors gracefully
bad_bytes = b'\xff\xfe'
safe = bad_bytes.decode('utf-8', errors='replace')
print(safe) # Output: (replacement characters)JavaScript: TextDecoder
// Decode a Uint8Array of UTF-8 bytes
const decoder = new TextDecoder('utf-8');
const bytes = new Uint8Array([0x48, 0x65, 0x6C, 0x6C, 0x6F]);
console.log(decoder.decode(bytes)); // Output: Hello
// Decode hex string to text
function hexToUtf8(hex) {
const bytes = hex.split(' ').map(h => parseInt(h, 16));
return new TextDecoder('utf-8').decode(new Uint8Array(bytes));
}
console.log(hexToUtf8('E2 9C 94')); // Output: ✔
// Handling streaming data
const stream = new TextDecoderStream('utf-8');
// Pipe a ReadableStream of bytes through itPHP: mb_detect_encoding() and hex conversion
// Decode hex to UTF-8 string
$hex = "48 65 6c 6c 6f";
$bytes = hex2bin(str_replace(' ', '', $hex));
echo $bytes; // Output: Hello
// Detect if a string is valid UTF-8
$text = "Caf\xc3\xa9";
if (mb_detect_encoding($text, 'UTF-8', true)) {
echo "Valid UTF-8";
} else {
echo "Not valid UTF-8";
}
// Convert from other encodings to UTF-8
$iso_text = mb_convert_encoding($text, 'UTF-8', 'ISO-8859-1');Java: new String(bytes, StandardCharsets.UTF_8)
import java.nio.charset.StandardCharsets;
// Decode byte array to string
byte[] utf8Bytes = {0x48, 0x65, 0x6C, 0x6C, 0x6F};
String decoded = new String(utf8Bytes, StandardCharsets.UTF_8);
System.out.println(decoded); // Output: Hello
// Decode hex string
String hex = "E2 9C 94";
String[] hexParts = hex.split(" ");
byte[] bytes = new byte[hexParts.length];
for (int i = 0; i < hexParts.length; i++) {
bytes[i] = (byte) Integer.parseInt(hexParts[i], 16);
}
System.out.println(new String(bytes, StandardCharsets.UTF_8)); // ✔How This Tool Works
Paste the UTF-8 Hex String (e.g.,
48 65 6c 6c 6f) into the input box.Click Decode.
The tool instantly converts the bytes into readable text like Hello.
All decoding happens client-side in your browser. No data is sent to any server, making it completely secure for sensitive data.
Tool Features
Decode UTF-8 hex to plain text
Accepts both spaced and unspaced hex (
E2 9C 94orE29C94)Instant, client-side decoding, secure and offline-ready
Handles multi-byte characters, emojis, and international scripts
Helpful for debugging encoded APIs, database fields, logs, or malware samples
Use Cases
Security and Forensics: Decode hex payloads in packet captures or memory dumps
Database Recovery: Fix malformed UTF-8 in corrupted records
Programming Debugging: Interpret API responses or logs with encoded text
Web Development: Decode encoded characters in HTML, CSS, or URLs
Localization QA: Check raw encoding of multilingual text
Combine With These Tools
UTF8 Encoder -- convert text into hex-formatted UTF-8 bytes
Base64 Decoder -- decode base64 strings into raw hex before UTF-8 decoding
URL Decoder -- decode %E2%9C%94 and other URL-safe sequences
Pro Tips
If your text contains
%E2%9C%94, first use a URL Decoder, then use this tool.Emojis and foreign-language characters usually use 3-4 byte UTF-8 sequences.
Watch out for invalid byte sequences, if the decoder fails, try rechecking spacing or corrupted data.
Use this decoder to understand how your app or browser processes UTF-8 data behind the scenes.
When debugging mojibake, try decoding the garbled text as Latin-1 first, then re-encoding as UTF-8.
Debugging encoded API responses? Qodex helps with automated API response debugging and testing.
Frequently Asked Questions
What happens if I input invalid UTF-8 bytes?
Can I use this for non-UTF-8 encodings like ISO-8859-1?
Is this secure to use for sensitive data?
Why are some characters shown as a replacement character?
Can I decode emojis or non-English characters?
What causes mojibake and how do I fix it?
How do I detect if a string is UTF-8 encoded?
What is the difference between UTF-8 and UTF-16?
Related Tools
Related Articles

Using this to test your own app?
Qodex is for teams who build software. It tests your web app and APIs on every release and tells you what broke. See how it works



