This page cleans whole batches of files: drop up to 50 together to get a per-file table of what’s hiding in each, then download every file cleaned as one zip. The sample below is a single translation-delivery string file — drop your own files to open the batch table. Everything runs in your browser — nothing is uploaded.
Hidden-character problems rarely arrive one file at a time. A translation agency delivers thirty .json / .po / .strings / .srt files at once. An export job writes a directory of CSVs. A docs repo has fifty Markdown files that have all been through the same copy-paste pipeline. Checking them one by one is exactly the kind of chore that doesn't get done — so drop them all together instead: up to 50 files, 5 MB each, 50 MB per batch.
Localization deliveries are the classic case. Strings that travelled through browser-based CAT editors pick up zero-width spaces mid-word; French and German translations legitimately use non-breaking spaces and narrow no-break spaces; word-processor round-trips leave curly quotes inside what should be machine-readable JSON; and tools disagree about byte-order marks, so half the files have one and half don't. A folder of CSV exports has its own well-known problems — same characters, different fallout.
One curly quote in one of thirty JSON files and the build fails with Unexpected token — the error names a byte offset, not the invisible character that caused it. A BOM at the top of a UTF-8 config makes some parsers choke on the very first key. A zero-width space inside a subtitle line renders as a visible tofu box on some players. And two files can print identically while comparing different, so the bug report says "works here."
Drop the files together (or use Open file and multi-select). You get one row per file: detected encoding, size, and a findings summary — how many invisible characters, exotic spaces, curly quotes, dashes and other flagged characters it contains. Click any row to inspect that file character-by-character in the x-ray. "Download all clean (.zip)" applies your current rule toggles to every file and saves name.clean.ext copies in one zip. Files that use CRLF line endings keep them; UTF-16 files are saved back as UTF-8, and the table says so. Files that look binary are flagged and left out of the zip rather than mangled.
The rule toggles are one set for the whole batch — you can't clean file A with different rules than file B in a single pass. And "flagged" doesn't mean "wrong": if you're shipping French UI strings, the non-breaking spaces before ! and ? and the narrow spaces inside 1 299,00 are correct French typography, not junk — untick the exotic-spaces rule and use the table as an audit instead of a blanket wash. The same goes for ZWNJ/ZWJ in Persian, Arabic and Hindi text, where they're doing real work. Finally, this is a text tool: .docx and .xlsx are zip containers, not text — they'll be flagged as binary. Export to plain text or CSV first (see text copied from Word).
Yes. Every file is read and cleaned locally in your browser — nothing is uploaded, which matters when the batch is a client's unreleased product copy or a legal document set. Load the page, go offline if you like, then drop the folder's contents.
Guides for the common cleanup jobs — what the source puts into your text, exactly what it breaks, and the tool preloaded with a demonstration:
AI-generated text · Text copied from Word / Google Docs · Text copied from a PDF · Pasted code that won’t run · CSV & spreadsheet data · Invisible watermarks · Many files at once (batch)
Dedicated pages for the usual suspects — what each one is, where it sneaks in from, the exact errors it causes, and how to find it in your editor:
Zero-width space (U+200B) · Non-breaking space (U+00A0) · Byte order mark (BOM) (U+FEFF) · Soft hyphen (U+00AD) · Smart quotes · Em dash (U+2014) · Narrow no-break space (U+202F) · Ideographic space (U+3000) · Zero-width joiner (U+200D) · Zero-width non-joiner (U+200C) · Word joiner (U+2060) · Right-to-left override (U+202E) · Left-to-right mark (U+200E) · Line separator (U+2028) · Variation selector-16 (U+FE0F) · Object replacement character (U+FFFC) · Hangul filler (U+3164) · Braille pattern blank (U+2800) · Ligatures · Minus sign (U+2212)
Страницы на русском — те же инструменты с переведёнными правилами и примерами под задачу:
Невидимые символы в тексте · Убрать невидимые символы · Почистить текст нейросети · Неразрывные пробелы в числах · Текст из Word · Код не запускается