gptcleanuppro.com / claude-zero-width-space-remover
Ready · local0w
Works with text copied from
ChatGPTClaudeGeminiGrokCopilotPerplexity
codepoints in the set
14
deleted / substituted
11 / 3
leave the browser
0 bytes

Operation

What the Claude zero-width space remover changes

Exactly one class of edit. Fourteen codepoints are matched and handled: eleven removed, three replaced with U+0020. No other byte in the input is altered. Whitespace handling is switched off on this route, punctuation normalisation is off, blank-line collapsing is off, and the output is not trimmed at either end.

That narrowness is the specification, not an omission. A transformation that touches one known set is auditable: run the result through a scanner and the count should be zero, and diff the input against the output and every change should be accounted for. A cleaner that also reflows whitespace produces a diff nobody can review.

Design

Substitution against deletion, and why it matters

Comparable tools delete every codepoint on their list, iterating the string and dropping anything matched. Applied to no-break space that is wrong. U+00A0 occupies the semantic role of a word separator, so removing it concatenates the two words around it and produces a corruption that reads as a typo rather than as an encoding artefact.

Three of the fourteen therefore carry a substitution rather than a deletion: no-break space U+00A0, narrow no-break space U+202F and hair space U+200A, each replaced with an ordinary space. The other eleven have no visual role, so deletion is correct for them. This distinction is not cosmetic. It is the difference between output you can publish and output you have to proofread.

Procedure

How to run the Claude zero-width space remover

Operate on the received artefact. Passing text through an editor or a formatter first frequently strips these codepoints incidentally, which destroys the evidence and the measurement at the same time.

Step 1
Paste the unmodified text. No length cap is imposed. A sample loader is available for verifying behaviour against known contaminated input.
Step 2
Execute. The action is labelled Remove hidden characters and takes no parameters, since this operation exposes no options.
Step 3
Copy the output. The input is retained in place, so the two can be diffed directly.

The set

The fourteen, and where the set ends

Fixed in this codebase, not configurable, and deliberately narrower than the widest lists published elsewhere.

Zero-width group, four
U+200B, U+200C, U+200D, U+2060. Each consumes a code unit while rendering nothing, so byte-level equality diverges from visual equality.
Byte-order mark
U+FEFF. Meaningful only at stream head. Mid-document instances surface as parser faults, feed validation errors and stray glyphs in some editors.
Soft hyphen
U+00AD. Conditional, inert until wrapping, at which point a hyphen appears inside a word that never contained one.
Bidirectional controls, five
U+202A through U+202E. The two overrides decouple display order from storage order, which is the mechanism behind filenames that read as something other than what they are.
Substituted three
U+00A0, U+202F, U+200A. Replaced with U+0020, since each occupies the visual position of a space.
Outside the set
Variation selectors, U+200E and U+200F, the isolate controls, the invisible math operators and U+180E are not handled here. Tools listing them are describing a wider operation than this one.

Scope

Why whitespace is out of scope on this route

Because whitespace carries meaning in a large fraction of the text people paste here. Indentation is syntax in Python and YAML. Trailing spaces are a hard line break in Markdown. Blank-line counts separate blocks in half a dozen formats. A cleaner that normalises spacing is making a semantic edit while presenting itself as hygiene.

The sibling route that also handles whitespace exists, and it is the right choice for prose. This one is the right choice when the artefact is structured and the only defect is a codepoint that should not be there.

Counter-cases

Where these codepoints are doing real work

U+200B was defined to indicate word boundaries without rendering a visible space, and to mark a permitted line break without a hyphen. It is used for exactly that in scripts that do not separate words visibly, including Thai, Myanmar, Khmer and Japanese. In HTML the wbr element serves the same function. Removing it from such text is data loss, not cleanup.

U+200C is likewise meaningful in Persian and in several Indic scripts, where it governs letter joining. The security case runs the other way: ICANN prohibits zero-width spaces in domain names because they support homograph attacks, in which a malicious URL is visually indistinguishable from a legitimate one. The right posture is to know which case you are in before running anything.

Declined claims

What the Claude zero-width space remover does not claim

It does not remove Claude's text watermark. Anthropic's published account states that nothing is added to the text and that there are no hidden characters, which places the mark categorically outside any codepoint operation. This is text hygiene, and it is not a method of concealing authorship or avoiding a disclosure requirement.

It produces no report, no per-character explanation and no analysis, since it is a transformer rather than a scanner. It offers no options, because this operation exposes none. It performs no punctuation or Markdown handling, accepts no files, exposes no API and makes no prediction about any detector's output.

The readout

Reading the number in the footer

The figure reported after a run is a length delta: input length minus output length. It is not a count of codepoints handled, and the difference is not a rounding issue. A substituted no-break space contributes zero to it, because one character was exchanged for one character.

So a run that reports zero may still have made three substitutions. If you need the count rather than the delta, scan the input before running this, and scan the output afterwards to confirm the pass completed.

FAQ

Zero-width space remover, answered directly

All answered in full, nothing to click open.

What exactly does this remove?

Fourteen codepoints: eleven deleted and three replaced with an ordinary space. Nothing else in the input is altered.

Why substitute three rather than delete them?

No-break space, narrow no-break space and hair space occupy the visual role of a separator. Deleting one concatenates the surrounding words.

Does it change whitespace?

No. Space collapsing, line-end trimming, blank-line collapsing and output trimming are all disabled on this route.

Does it change punctuation or Markdown?

No. Punctuation normalisation is off, and no markup handling occurs here.

Why does it have no options?

This operation exposes none in the codebase, so the widget renders no controls. One behaviour, no configuration.

Is anything transmitted?

No. The pass runs in the browser, so nothing leaves the page and nothing is retained.

Are there usage limits?

None. No allowance, no cooldown, no character cap and no account, since there is no server in the path.

Is the transformation deterministic?

Yes. Identical input produces identical output, and the result can be verified by scanning it.

Does it handle variation selectors or bidi marks?

No. Those sit outside the fourteen, as do the isolate controls, the invisible math operators and the Mongolian vowel separator.

Are composed emoji preserved?

Yes. A joiner flanked by pictographic characters is recognised as composing a glyph and is left in place.

What does the footer number report?

The length delta between input and output, not a count of codepoints handled. Substitutions contribute zero to it.

A run reported zero. Did anything happen?

Possibly. Substitutions do not change length, so a zero delta does not rule out three replacements.

Can I see what was found?

Not here. This route transforms without reporting. The scanner route renders each finding with its reason.

Is it safe on Thai, Khmer or Japanese text?

Not unconditionally. U+200B marks word boundaries in those scripts, so removal is data loss.

What about Persian and Indic scripts?

U+200C governs letter joining there, so review that text before running any removal over it.

Why are zero-width spaces banned in domain names?

ICANN prohibits them because they enable homograph attacks, where a malicious URL is visually indistinguishable from a legitimate one.

Does it remove Claude's text watermark?

No. Anthropic states that nothing is added to the text and there are no hidden characters, so no codepoint operation can reach it.

Does it affect AI detection?

No. Word choice is unchanged, and no prediction about any detector is offered.

Is there a file, batch or API path?

None of the three. Pasted text, one pass at a time.

Is it safe on source code?

Yes, and that is the design intent. No whitespace moves, so a diff shows only the removals.

One class of edit, fully auditable

Fourteen codepoints handled, everything else byte identical. Diff the output and every change is accounted for.

Remove hidden characters