Validate UTF8

Validate byte sequences against the RFC 3629 UTF-8 standard. Detects and pinpoints the exact byte position and classification of overlong encodings, invalid continuations, surrogates, and truncated bytes.

Private • In-browser processing • Zero server uploads

Interactive workspace loading...

How to Use Validate UTF8

1
Paste Byte Stream
Enter bytes in Hex (e.g. 'F0 9F 9A 80'), Binary, Decimal, or raw characters.
2
Run Validation
The engine audits each byte header and continuation pair in sequence.
3
Review Diagnostics
Inspect total byte count, character count, or view detailed error explanations if invalid.

Key Features

Strict RFC 3629 Specification
Tests byte sequences against the complete UTF-8 specification with zero false negatives.
Comprehensive Error Diagnostics
Identifies Overlong Encodings, Bad Continuation Bytes, UTF-16 Surrogates (U+D800–U+DFFF), Out-of-Range (> U+10FFFF), and Truncated streams.
Exact Byte Location
Reports the precise index and hexadecimal value of the offending byte.
Multi-Format Inputs
Accepts raw Hex, Binary, Decimal bytes, or Text strings with auto-detection.

Common Use Cases

  • Security auditing against directory traversal and bypass attacks using overlong UTF-8 encodings (e.g. 0xC0 0xAF).
  • Debugging corrupted data in network payloads, database exports, and file parsers.
  • Ensuring binary protocols do not inject illegal UTF-16 surrogate halves into UTF-8 storage.
  • Verifying character set encoders in embedded devices and compiler toolchains.

Frequently Asked Questions

An overlong encoding occurs when a character is encoded using more bytes than necessary (for example, encoding the 1-byte ASCII '/' using 2 bytes: 0xC0 0xAF). RFC 3629 strictly forbids overlong encodings because they can bypass security filters.

Code points U+D800 through U+DFFF are reserved exclusively for UTF-16 surrogate pairs. Encoding them into UTF-8 (e.g. 0xED 0xA0 0x80) is explicitly prohibited by the Unicode standard.

Yes! The tool automatically detects whether you pasted Hexadecimal (e.g. 48 65), Binary (e.g. 01001000), or Decimal values (e.g. 72 101).