Find zero-width spaces, ideographic spaces, NBSP, BOM and control characters with code points and positions
Each character found becomes a badge such as "U+200B". Hover over a badge to see its kind. Everything else is shown as-is, so you can see the surrounding context.
Ideographic space (U+3000), the U+2000-U+200A spaces and the no-break space (U+00A0) become a normal space. A tab becomes two spaces. Line separators (U+2028 / U+2029) become a newline. Zero-width characters, the BOM, soft hyphens, control characters, bidi controls and variation selectors are removed.
Lines are counted by U+000A and columns are counted in code points. A character made of a surrogate pair, such as an emoji, counts as one. This is not the UTF-16 code unit index, so it may differ from what your editor shows.
Variation selectors (U+FE00-U+FE0F / U+E0100-U+E01EF) select an alternative glyph for the preceding character. Removing them drops that choice. Check whether they are needed before cleaning text that holds personal or place names.
They arrive by copying from web pages, from the output of some translation services, and from editors that insert soft line-break hints. They render as nothing, so you usually notice only when a comparison fails or a search returns nothing.
Tick only the ideographic space kind. By default only the kinds that cause silent damage are ticked: zero-width characters, the BOM, soft hyphens, control characters and bidi controls.
It depends on the consumer. A BOM at the start of a UTF-8 file can help Excel detect the encoding, while the same BOM breaks JSON parsers and shell scripts. Decide based on who reads the file.
Tabs are detected but unticked by default. Newlines (U+000A / U+000D) are not detected because they are meaningful line breaks. Line separators (U+2028 / U+2029) are detected, because most environments do not treat them as newlines.
No. Everything runs in your browser as JavaScript, and nothing you type is sent to a server.