Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Will invisible cleanup remove the tabs separating TSV columns?

No. Our direct-string tests retain tabs and empty TSV fields. They remove an authored U+200B inside a field without changing the number of tab-delimited columns.

Tested October 8, 2026 · v24.19.0 · 4 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Interior empty field

Measured inputs and outputs

These are locally constructed test strings, not evidence that Claude inserts these characters. We executed the saved homepage script snapshot with a minimal DOM harness and compared exact strings. The invisible-checkbox state and dash mode appear in each row. The observations below test this page's specific question. Three destination checks use separately recorded browser observations; those pages explain the distinction. We make no detector-score or statistical-watermark removal claim.

Before and after observations; full code points and strings are in the JSON download.
Fixture and modeInput string and code pointsOutput and cleaner statusObserved before / after
Interior empty field
direct string / keep / invisible true
"A\t\tB"
U+0041 U+0009 U+0009 U+0042
"A\t\tB"
No selected invisible characters found
{"fields":["A","","B"],"columns":3}
{"fields":["A","","B"],"columns":3}
Trailing empty field
direct string / keep / invisible true
"A\tB\t"
U+0041 U+0009 U+0042 U+0009
"A\tB\t"
No selected invisible characters found
{"fields":["A","B",""],"columns":3}
{"fields":["A","B",""],"columns":3}
Marker inside field
direct string / keep / invisible true
"A​B\tC"
U+0041 U+200B U+0042 U+0009 U+0043
"AB\tC"
Removed 1 invisible character
{"fields":["A​B","C"],"columns":2}
{"fields":["AB","C"],"columns":2}
Space instead of tab
direct string / keep / invisible true
"A B\tC"
U+0041 U+0020 U+0042 U+0009 U+0043
"A B\tC"
No selected invisible characters found
{"fields":["A B","C"],"columns":2}
{"fields":["A B","C"],"columns":2}

Empty fields remain observable

The observer splits each authored row at a literal tab. Two consecutive tabs in the first fixture yield three fields, with the middle field empty. A final tab in the second also yields three fields, with an empty final field. Cleanup leaves both tab sequences intact. The third fixture removes U+200B inside the first field and still produces two columns. The fourth contains an ordinary space within its first field, so it remains a two-column row as well. We record complete field arrays, not only a count that could conceal shifted or empty values.

This is a deliberately narrow TSV model

The homepage removes five named characters and does not treat tabs as removable formatting. This test concerns one line split by a single-character delimiter. It does not parse quoted TSV, escaped tabs, multiline records or a spreadsheet export dialect. Our existing CSV guides address other delimiter and quoting questions and should not be used as a TSV parser specification. The saved JavaScript split operation supplies the exact rules used here. No spreadsheet application, database importer or real Claude export was opened, and retained column count does not establish that field contents are semantically correct.

Validate the destination column contract

Keep an original export and inspect separators before editing a working copy. Compare each resulting field with the destination column definition, including whether empty and trailing fields are allowed. Replacing tabs with spaces changes the delimiter structure even when the line appears visually similar. Removing a selected marker within a field can also change its identifier or value, so review that edit separately from the stable column count. Run the actual importer after cleanup and preserve its validation result. This page demonstrates retention of tab boundaries in known strings; it does not promise round-trip fidelity for every tabular format or spreadsheet.

Reproduce this test

Save reproduce.cjs and tested-app.js in the same folder. Run the command below with Node.js. The harness prints its runtime, script SHA-256 and every measured row. Compare those rows with the original record. Using a newer script or runtime creates a new experiment; retain the version information with your rerun.

node reproduce.cjs

Reference and next check

ECMAScript String split provides the relevant primary definition. The table and fixture analysis are original measurements. For broader inspection, use our Unicode inspector. Read the scope distinction before interpreting cleanup as a watermark result.