About this tool
Diagnose the browser editor value or an exact decoded strict UTF-8 file source, then create a reviewed normalization output without upload or silent surrogate repair.
- Runs ECMAScript NFC, NFD, NFKC, and NFKD normalization in a disposable worker, checks all four form states, and confirms that a second runtime pass leaves the requested output stable.
- Separates UTF-16 code units, code point entries, Unicode scalar values, runtime grapheme segments, exact UTF-8 bytes, and TextEncoder replacement behavior for isolated surrogates.
- Labels bidi controls, default-ignorable and other format controls, noncharacters, unexpected C0/C1 controls, private-use values, runtime-unassigned values, and U+FFFD for contextual review without making spoofing or safety claims.
How to use Unicode Inspector
Enter browser-editor text or load a strict UTF-8 file, choose inspect-only, NFC, NFD, NFKC, or NFKD, then run the isolated worker. Use a file when exact CRLF or CR evidence matters; browser textarea editing normalizes those line endings to LF. Review form status, encoding evidence, escaped output, contextual findings, and code point rows before copying or downloading current well-formed output.
When this tool is useful
- Diagnosing why visually similar strings compare as different identifiers, filenames, database keys, or test fixtures.
- Reviewing normalization and invisible formatting before moving bounded text between systems.
Practical tips
- Start with NFC when the destination expects canonical normalization, and use NFKC or NFKD only after confirming compatibility distinctions are disposable.
- Keep escaped preview selected when reviewing controls or bidirectional text, then inspect the rendered view only for visual context.
- Treat browser grapheme boundaries as runtime evidence, not a fixed Unicode-version conformance claim.
- Use a version-pinned UTS #39 implementation separately when a real identifier confusable policy is required.
Examples you can test
Load an example, compare the result with the expected output, then replace it with your own input.
Compare composed and decomposed text
Example input
Cafe followed by U+0301, a precomposed e-acute, fullwidth ABC, an emoji ZWJ sequence, and U+200B
Expected output
NFC output, form matrix, code-unit and scalar counts, browser grapheme boundaries, escaped U+200B evidence, and source-free JSON report
A default-ignorable finding can be legitimate and is not a malicious-content verdict.
Validation checklist
- Confirm the destination requires the selected normalization form.
- Review every compatibility change before accepting NFKC or NFKD output.
- Resolve isolated surrogates explicitly and rerun inspection before UTF-8 export.
- Compare hashes, counts, first-difference index, and relevant code point rows with the destination system.
- Apply confusable, identifier, rendering, and application-specific policies separately.