UTF-8 is a variable-width Unicode encoding that maps every Unicode scalar value to a sequence of one to four 8-bit bytes, with ASCII code points kept as a single unchanged byte and supplementary characters such as most emoji requiring four bytes. A UTF-8 converter online is a browser-based tool that encodes Unicode text into UTF-8 bytes shown as hexadecimal, decimal, or 8-bit binary notation, or decodes one of those notations back into Unicode text. The defining property of a trustworthy online UTF-8 converter is fatal decoding, meaning that malformed input is rejected with an explicit error rather than silently replaced with the U+FFFD replacement character. This distinction matters because a converted result that looks like readable text can hide real corruption when bytes have been truncated, reinterpreted from a legacy encoding such as Windows-1252, or contain overlong sequences. A practical converter also supports a lossless round trip, encoding then decoding back to the exact same character sequence, and keeps every operation inside the current browser tab so the input never leaves the user's machine.

What a UTF-8 Converter Online Actually Does
At its core, an online UTF-8 converter performs one of two directions: it encodes a Unicode string into a sequence of bytes following the rules of RFC 3629, or it decodes a sequence of bytes that is already known to be UTF-8 back into characters. The bytes themselves are the same in both directions; what changes is the representation shown on screen and the way the input is parsed. Encoding accepts plain Unicode text, including emoji, accented letters, and CJK characters, and produces a byte array. Decoding accepts a notation of that byte array and produces Unicode text. Because UTF-8 is the dominant encoding on the web and in modern APIs, this round trip happens frequently when inspecting HTTP responses, JSON payloads, file headers, or database exports.
The UTF-8 Encoder / Decoder runs the conversion locally with the browser's standard TextEncoder and a fatal TextDecoder, so overlong sequences, truncated bytes, isolated continuation bytes, surrogate values, and code points above U+10FFFF all fail with a visible error. It also checks for unpaired UTF-16 surrogate code units before encoding, so an input JavaScript string that contains an ill-formed fragment does not silently turn into U+FFFD. The tool never normalizes, escapes, translates, or auto-detects a different encoding, and nothing is sent to a server.
Choosing the Right Notation: Hex, Decimal, or Binary
Hexadecimal, decimal, and 8-bit binary are three display notations for the same UTF-8 byte array. None of them is more "correct" than the others; the choice depends on what the reader of the output needs. Hexadecimal groups naturally with two characters per byte and matches the format used by debuggers, hex dump tools, and most API documentation. Decimal is the most readable for humans who think in base 10 and is common when explaining byte values to a less technical audience. Binary makes the actual bit pattern of each byte visible, which is useful when teaching or verifying the leading and continuation byte structure of UTF-8.
| Notation | Output format per byte | Decoding input rules | Typical use case |
|---|---|---|---|
| Hexadecimal | Uppercase two-digit bytes separated by spaces, for example E2 82 AC | Space- or comma-separated one- or two-digit byte tokens, optional 0x prefixes, or one continuous even-length string | Inspecting payloads and reading byte values at a glance |
| Decimal | Integer values from 0 through 255 separated by spaces, for example 226 130 172 | Integer tokens only | Explaining byte values to non-programmers and in teaching material |
| Binary | Exactly eight zero-or-one characters per byte, for example 11100010 10000010 10101100 | Eight-character tokens of only 0 and 1 | Verifying the leading and continuation bit pattern of UTF-8 |
Because the underlying bytes are unchanged, switching between notations on a converter like the UTF-8 Encoder / Decoder should produce a byte-for-byte equivalent sequence. If two notations of the "same" input disagree, the input itself is not what was assumed.
Convert Text or Bytes in Three Steps
- Pick a direction: text to UTF-8 bytes or UTF-8 bytes to text, then choose hexadecimal, decimal, or binary notation.
- Enter Unicode text in the text direction, or paste strictly formatted byte tokens (space- or comma-separated, with optional 0x prefixes, or a single continuous even-length hex string) in the bytes direction, then run the conversion.
- Compare the exact output with the source format and verify a round trip by converting the result back before replacing any original data.
The strictness of step two is what separates a lossless online converter from one that papers over corruption. A continuous hex string with an odd number of digits cannot form whole bytes, so the converter must refuse it rather than guess. Likewise, a binary token with fewer than eight characters is not a byte, and a decimal value above 255 cannot appear in UTF-8. Treating those as errors instead of forgiving them is the same principle as fatal decoding applied to the input notation itself.
UTF-8 Boundaries and Known Byte Patterns
UTF-8 has clean byte-length boundaries at U+007F, U+0080, U+07FF, U+0800, and U+FFFF, plus a final cutoff at U+10FFFF. ASCII code points up to and including U+007F fit in a single byte with their original value, so the dollar sign U+0024 encodes as 24 and the letter A encodes as 41. Above U+007F the leading and continuation byte structure takes over, and the well-known anchor points below match what the Unicode standard and RFC 3629 specify exactly.
| Code point | Character | UTF-8 hex bytes | Byte count |
|---|---|---|---|
| U+0024 | Dollar sign ($) | 24 | 1 |
| U+0041 | Latin A | 41 | 1 |
| U+007F | DELETE boundary | 7F | 1 |
| U+00A2 | Cent sign (¢) | C2 A2 | 2 |
| U+0800 | Boundary to 3 bytes | E0 A0 80 | 3 |
| U+20AC | Euro sign (€) | E2 82 AC | 3 |
| U+1F600 | Grinning face (😀) | F0 9F 98 80 | 4 |
| U+10FFFF | Maximum scalar | F4 8F BF BF | 4 |
These patterns are useful as test fixtures. A reliable way to confirm an online UTF-8 converter is wired up correctly is to paste a few of these anchors in both directions, then check that the output matches the table above exactly. If € comes back as anything other than E2 82 AC, the converter is not following RFC 3629 and should not be trusted.
Worked Example: Encoding the Euro Sign €
Take the euro sign, U+20AC, which is the standard example of a 3-byte UTF-8 sequence. The decimal value is 8364, and its binary form is 10000010101100, a 14-bit number. UTF-8 allocates three bytes for values from U+0800 through U+FFFF using the template 1110xxxx 10xxxxxx 10xxxxxx, which leaves 16 bits for the payload. Substituting the 14 bits of 8364 into the low 16 positions, padded with leading zeros, gives 0010 000010 101100, which splits across the three byte templates as 0010, 000010, and 101100. Filling the templates produces 11100010 10000010 10101100, and converting each byte to hexadecimal yields E2, 82, and AC. The online tool reports the same sequence: E2 82 AC in hex, 226 130 172 in decimal, and 11100010 10000010 10101100 in binary. Decoding those three bytes back must return exactly €; if it does not, the converter is broken at a structural level rather than at a notation level.
Verifying a Lossless Round Trip
A round-trip check is the cheapest and most powerful test for any online UTF-8 converter. Encode a short piece of text that contains at least one ASCII character, one non-ASCII Latin character, one CJK or accented character, and one emoji. Copy the resulting byte sequence, switch the notation to confirm the bytes match across views, then decode the bytes back to text and compare character-for-character against the original. The byte count reported by the tool should equal the number of UTF-8 bytes produced, and the character count after decoding should match the original character count. When those checks all line up, the converter can be trusted on the same kind of input; when any of them fails, the converter should not be used as the source of truth. The same habit applies to encoding and decoding separately, because a tool can be correct in one direction and subtly wrong in the other. Resources such as the round-trip verification guide for UTF-8 browser tools describe this pattern in more depth.
Limits and Common Pitfalls
The UTF-8 Encoder / Decoder bounds input at 200,000 UTF-16 code units for text and 200,000 bytes for decoded notation. That cap keeps memory, token parsing, output rendering, and interface work inside a single tab, and it prevents accidental freezes on large pasted dumps. Anything larger belongs in a streaming file tool, not an online converter, because the page is built around interactive inspection rather than bulk transformation. It also does not auto-detect legacy encodings such as Windows-1252, Shift JIS, GBK, or the ISO-8859 families. If a byte sequence fails to decode, the right next step is to identify the original encoding rather than to keep forcing the bytes through UTF-8 hoping for a match. Common symptoms of forcing include the euro sign showing up as three characters, accented letters turning into é-style mojibake, or the converter quietly producing U+FFFD replacement characters where a real byte once stood. A fatal decoder makes those symptoms visible as errors instead of as plausible-looking text.
When to Use a Different Tool
An online UTF-8 converter is the right tool when the input fits comfortably in a tab, the goal is verification or inspection, and the output should stay human-readable as hex, decimal, or binary. It is the wrong tool for files, archives, or anything larger than the 200,000-unit cap. It is also the wrong tool for byte representations that are not UTF-8: Base64, URL percent encoding, HTML entities, and Unicode escape sequences each map bytes or code points to text in a different way, and they need their own dedicated converters. When the task is to convert a legacy code page into UTF-8 for archival, identify the original encoding first and use a file-based converter rather than an interactive online form. For interactive, byte-exact UTF-8 work that must stay local and must fail loudly on bad input, the UTF-8 Encoder / Decoder covers text-to-bytes and bytes-to-text in a single place, and the Unicode 17.0 core specification documents the scalar ranges and encoding forms that the tool is built around.
If you're weighing options, Base100 Encode on Android: A Mobile Browser Walkthrough covers this in detail.