UTF-8 is how most of the web, Linux, and modern APIs store text. It encodes each Unicode character as one to four bytes. English letters look like ASCII; emoji and accented letters use more bytes. Our UTF-8 & Unicode tool shows the hex bytes for any string you type.
Every character has a number — a code point. “A” is U+0041, “€” is U+20AC, “😀” is U+1F600. Programmers write them as U+ plus hex. Unicode defines the character; UTF-8 is one way to store that number in a file.
110xxxxx pattern.1110xxxx pattern.11110xxx pattern.Continuation bytes always start with 10xxxxxx. That lets parsers resync if a stream is damaged.
“A” (U+0041) → single byte 41.
“€” (U+20AC) → three bytes E2 82 AC.
“Hello” → five ASCII bytes; no multibyte characters.
Type any of these in the UTF-8 tool to see per-character breakdown and the full hex string.
UTF-8 is backward-compatible with ASCII, has no byte-order mark requirement, and avoids zero bytes in English text (helpful for C strings). UTF-16 is fixed-width for BMP characters but uses two or four bytes per code unit and needs endianness care. JSON, HTML, and Rust’s default String all assume UTF-8.
string.length counts UTF-16 code units, not graphemes or UTF-8 bytes.RFC 3629 (UTF-8); Unicode Standard; WHATWG encoding specification.
Last updated: June 2026