Byte representation is separated from Unicode text
The review reports exact UTF-8 bytes, strict decode status, BOM presence and round-trip behavior so hex/decimal/binary notation is not confused with Unicode code-point notation.
Choose the byte notation, validate complete bytes, and decode strictly as UTF-8 without a server.
These tools operate on bytes and Unicode text locally. “Text to hex/binary/decimal” means the UTF-8 encoding of the text, not the numeric Unicode code point unless a tool explicitly says code point.
Locate the first malformed byte, or prove a valid sequence by decoding and re-encoding the exact same bytes.
The review reports exact UTF-8 bytes, strict decode status, BOM presence and round-trip behavior so hex/decimal/binary notation is not confused with Unicode code-point notation.
Use the tool above first. These notes explain how to interpret, verify and bound the result without displacing the primary workflow.
UTF-8 is a byte encoding, so the input must ultimately represent bytes. Hex, decimal or other byte notations should be converted to the same byte sequence before decoding; visually similar text is not a substitute for the underlying bytes.
Malformed continuation bytes, overlong encodings, surrogate code points and values outside the Unicode range are invalid UTF-8. A strict decoder should report the problem instead of silently manufacturing a character unless replacement behavior is explicitly requested.
Do not confuse UTF-8 bytes with Unicode code-point notation. U+00E9 names a code point, while C3 A9 is its UTF-8 byte sequence. Those representations are related but are not interchangeable inputs.
After decoding valid bytes, encode the resulting text back to UTF-8 and compare the bytes with the original sequence. A byte-for-byte round trip is strong evidence that no data was lost or normalized during the conversion.
A correct decode can still render as boxes, combining sequences or visually reordered text depending on fonts and Unicode behavior. Decoding establishes character data; font coverage and grapheme rendering are separate layers.