TextWash

Paste text or drop files. See every hidden character. Scrub it clean. Everything runs in your browser — nothing is uploaded.

Input

X-ray hover a highlight for details

Cleaned output copied ✓

Cleaning rules

What is this?

Text copied between apps picks up characters you can't see: zero-width spaces, non-breaking spaces, byte-order marks, soft hyphens, curly quotes, em-dashes, ligatures. They break code, config files, CSV imports, terminal commands, search-and-replace, and they make pasted AI or word-processor text easy to spot.

When would I use it?

Before pasting into source code, YAML/JSON, a database, a CMS, a spreadsheet formula, a shell — or any time text "looks right" but behaves wrong. Also handy for normalizing quotes and dashes to plain ASCII house style.

Why does my code have U+200B in it?

U+200B is a zero-width space — an invisible character that often sneaks in when you copy code from web pages, chat apps, PDFs, or AI assistants. Compilers and interpreters see it as an unexpected token ("invalid character U+200B", "SyntaxError: invalid character"), even though the line looks fine. Paste the offending line above: the x-ray view marks every zero-width space, and one click removes them all.

Why does search-and-replace miss spaces that are clearly there?

They're probably non-breaking spaces (U+00A0) or one of a dozen other Unicode space characters, which look identical to a regular space but don't match one. Word processors and web pages insert them constantly. The "exotic spaces" rule converts them all to plain spaces.

Can I clean a whole file?

Yes — drop any text file on the page (or use "Open file…"), up to 5 MB. TextWash detects the encoding (UTF-8, UTF-16 with BOM, or legacy Windows-1252), keeps a leading BOM visible so you can see it's there, and "Download" saves the cleaned version next to your original as name.clean.ext, preserving CRLF line endings if the file used them. The file never leaves your machine.

Can I clean many files at once?

Yes — drop several files together (up to 50, 5 MB each) and you get a batch table showing exactly what's hiding in each one. Click any row to inspect that file in the x-ray, and "Download all clean (.zip)" applies your current cleaning rules to every file and saves a zip of name.clean.ext copies. CRLF line endings are preserved per file; UTF-16 files are saved back as UTF-8 (noted in the table). Everything still happens in your browser — no file is ever uploaded.

Can I send someone a link showing what's hidden in a snippet?

Yes — "Copy link" packs the current text into the URL after the # (compressed). Whoever opens the link sees the same x-ray immediately. URL fragments are never sent to any server — the text is decoded locally in the recipient's browser, so this stays 100% client-side. Links carry up to a few KB of text; for anything bigger, share the file instead.

Is my text sent anywhere?

No. The page is static and all analysis happens locally in your browser. There's no server-side processing, no analytics on your text, no signup.