Refresh after changing the text or choices
Detection is manual: use Detect or Ctrl/Cmd+Enter. Editing input or changing cleanup categories makes the previous result stale and disables export. Run detection again before creating a cleanup preview.
Unicode and Internationalization
Inspect positions and categories before deciding what to change.
Text stays in this browser and is not uploaded.
All categories start unselected. Selecting a category confirms its stated effect; detect again, then preview before applying.
Unicode 17.0.0 fixed subset, 521 code points plus isolated surrogates. This is not complete glyph visibility detection or a security verdict. Official character names remain in Unicode notation.
Offset and index start at 0; line and column start at 1. Columns count code points, not visual cells. CRLF is one break; CR, LF, NEL, LS and PS also break lines. Both CRLF characters belong to the preceding line.
Up to 100,000 UTF-16 units. Untouched CR/CRLF are preserved as received from the browser; newly typed line breaks use LF. The editor may display normalized line endings.
Highlighted markers are display aids, not inserted characters. Controls are shown in logical storage order rather than executed. Context is limited to 24 UTF-16 units per side.
Enter text or load the example, then detect characters.
An invisible character detector is useful when a pasted identifier looks right but an exact match fails. A zero-width character can split a word without leaving a visible gap; comparing the stored code points explains the difference.
Start with a small fragment that reproduces the problem. This zero-width character detector reports hidden Unicode characters alongside unusual spaces and controls, preserving the original input until you approve a change.
The invisible character detector marks each finding in its surrounding text. A non-breaking space between a number and a unit can look ordinary while preventing wrapping or failing an exact comparison. The report makes that distinction explicit.
A joiner can hold a family emoji together or shape letters in a word. Cleanup starts with no categories selected, so you can remove unwanted zero-width spaces while leaving joiners and variation selectors alone.
Detection is manual: use Detect or Ctrl/Cmd+Enter. Editing input or changing cleanup categories makes the previous result stale and disables export. Run detection again before creating a cleanup preview.
Choose each unwanted category explicitly. Special spaces become ordinary spaces; other selected characters are deleted. Review the before-and-after preview and counts, especially when controls include tabs or line breaks.
Apply writes the preview into the input and refreshes the findings. Undo restores the preceding input and result. Example and Clear also preview a replacement when existing text would be overwritten.
Each finding includes its U+ value, name and category. Context uses visible markers in logical storage order, so directional controls cannot rearrange the diagnostic fragment and obscure the location being reviewed.
Compare a zero-based UTF-16 offset, a zero-based code point index and one-based line and column values. Supplementary characters occupy two UTF-16 units, so these coordinates need not have equal numbers.
The list reveals findings in batches of 50. JSON export includes every finding and numerical position, without embedding the complete source. Text export contains the current scanned input; it becomes cleaned text only after Apply.
Yes. ZWJ and ZWNJ affect joined writing, and variation selectors affect glyph or emoji presentation. Review the context and leave those categories unselected when their purpose is intentional. Detection alone does not change them.
UTF-16 offsets and code point indices start at zero. Lines and code point columns start at one. A supplementary emoji takes two UTF-16 units but advances the code point index once; CRLF advances the line once.
U+00A0 prevents a line break between adjacent text. It is distinct from U+0020 even when both appear as a blank gap. Selecting the special-spaces category replaces it with an ordinary space rather than joining the surrounding words.
Deleted characters contributed to the original length even when they were not visible. A supplementary variation selector occupies two UTF-16 units. Space replacement may preserve length while changing behavior, so compare the transformation as well as the totals.
Code editors can highlight unusual Unicode through their settings. For a pasted fragment, inspect its U+ values here and use the explicit offset convention when locating the corresponding source. This page does not configure your editor.
Found a character or position that needs another look?
Use the invisible character detector on the smallest failing example, then confirm only the categories whose removal or replacement you actually intend.