Skip to main content
CSV First Aid

Remove invisible characters from a CSV

NBSP, zero-width joiners, stray control bytes — you can't see them in Excel, but VLOOKUP can, and it won't match. We scan every cell and remove the ones that shouldn't be there.

Invisible chars removed

Before

John Smith, 25

After

John Smith, 25

Drop your CSV file here

or click to browse

The "invisible chars" fix will be auto-detected.

What is this and why does it matter?

Some characters are completely invisible — they don't show up in Excel, Notepad, or anywhere else. But they're there, and they cause lookups to fail, filters to miss records, and duplicate checks to not work. A cell that looks like 'Alice' might actually contain a hidden character that makes it different from the real 'Alice'.

These invisible characters sneak in from copying text from websites, pasting from emails, combining files from different systems, or exporting from older software. You can't see them, but your tools can — and they break things.

CSV First Aid scans every cell in your file and removes all hidden characters. The diagnosis tells you exactly how many cells were affected, so you can see how widespread the problem was.

How it works

  1. 1Drop your CSV. We scan every cell for hidden invisible characters.
  2. 2The diagnosis card shows how many cells contain invisible characters.
  3. 3Apply → hidden characters are gone. Download.

FAQ

What characters are detected?

NBSP (U+00A0), zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D), word joiner (U+2060), BOM (U+FEFF), null bytes (U+0000), and all C0/C1 control characters (U+0001–U+001F, U+007F, U+000E–U+001F).

Will this break fields that intentionally use NBSP?

NBSP is converted to a regular space, not deleted. If your data uses NBSP for formatting (e.g., non-breaking spaces in names), the visual output is identical. The space character changes from U+00A0 to U+0020.

How can I see invisible characters before fixing?

Use a hex editor, or in Python: repr(cell_value) will show \xa0, \u200b, etc. In the diagnosis panel, we show the count so you know they're there.