
UTF8 Decoder
The UTF-8 Decoder by Qodex 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.
The Qodex 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 accentsDecode 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 it
PHP: 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.
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 Articles

Test your APIs today!
Write in plain English — Qodex turns it into secure, ready-to-run tests.



