Reading hex dumps
Hex dumps, packet captures, database blobs, MQTT payloads and debug logs often show text as hexadecimal bytes: 48 65 6c 6c 6f. Each pair of digits is one byte; in UTF-8, bytes below 80 are plain ASCII characters, and bytes from c2 upwards start multi-byte characters such as accented letters and emoji.
This converter accepts the formats you are likely to copy: spaced bytes, a continuous string, 0x41 0x42, 41:42:43 from network tools, or comma-separated arrays from code.
Worked example
43 61 66 c3 a9 20 e2 98 95 → C, a, f, then c3 a9 = é, a space, and e2 98 95 = ☕ → Café ☕.
When it fails
An odd number of digits means a digit is missing somewhere. "Not valid UTF-8" means the bytes are not UTF-8 text: they may be binary data, or text in an older encoding such as Latin-1, where e9 alone means é.
How this works
The page strips 0x prefixes and separators (spaces, commas, colons, hyphens), checks that only hexadecimal digits remain and that there is an even number of them, and turns each pair into a byte. The bytes are decoded as UTF-8 in strict mode, so a problem is reported with its cause instead of showing garbled characters. Switch to Encode for the reverse. Everything runs in this tab.
Frequently asked
What does 0a mean in hex?
A line feed (newline). 0d is a carriage return, and 0d 0a together is a Windows line ending.
Why do I get 'not valid UTF-8'?
The bytes are not UTF-8 text: they may be binary data or text saved in another encoding such as Latin-1.
Can I paste 0x41,0x42?
Yes. 0x prefixes, commas, colons and spaces are all ignored.
Is my data sent anywhere?
No. Decoding runs in your browser.
Sources
- The Unicode Standard, latest version
- RFC 4648 — The Base16, Base32, and Base64 Data Encodings
- Wikipedia — Hexadecimal
Reviewed Oct 17, 2026 · test vectors fixtures/dev/hex-to-text/