Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Can two strings compare equal for sorting but differ exactly?

Yes in our recorded English Intl.Collator tests: AB and A + U+200B + B compare as equal for collation while strict string equality fails. Save both comparisons when diagnosing a mismatch.

Tested October 6, 2026 · v24.19.0 · 3 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Selected marker

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. 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
Selected marker
direct string / keep / invisible true
"A​B"
U+0041 U+200B U+0042
"AB"
Removed 1 invisible character
{"strictAB":false,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}
{"strictAB":true,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}
Retained direction mark
direct string / keep / invisible true
"A‎B"
U+0041 U+200E U+0042
"A‎B"
No selected invisible characters found
{"strictAB":false,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}
{"strictAB":false,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}
Visible reference
direct string / keep / invisible true
"AB"
U+0041 U+0042
"AB"
No selected invisible characters found
{"strictAB":true,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}
{"strictAB":true,"collationAB":0,"resolved":{"locale":"en","usage":"sort","sensitivity":"variant","ignorePunctuation":false,"collation":"default","numeric":false,"caseFirst":"false"}}

Two different equivalence decisions

The observer compares each string against AB twice: strict equality checks the sequence, while Intl.Collator compares according to its configured locale rules. In this runtime, the selected-marker and retained-direction-mark fixtures both compare as collation zero before cleaning while strict equality is false. Cleanup makes the selected-marker fixture strictly equal to AB. The direction-mark fixture remains strictly unequal because U+200E is retained. The visible reference is equal by both methods throughout. Each row includes the resolved collator settings rather than silently assuming them.

Zero is a sorting result, not an identical sequence

Intl.Collator can treat some characters as ignorable under a locale implementation. That is a distinct question from whether two strings contain the same code points. We did not test a database collation, operating-system file ordering, another locale or another ICU version. The runtime and resolved options in results.json delimit the observation. The homepage does not call a collator; it deletes selected code points. A visually identical sort grouping can therefore coexist with a failed exact match in a different stage of a workflow.

Record the comparator your destination uses

When a sorted list seems correct but a lookup fails, compare exact strings and record the sorting comparator separately. Do not deduplicate records just because a locale comparator returns zero. Confirm the identifier policy and inspect original code points before applying a targeted edit. If the destination defines its own collation, test that actual implementation. This experiment explains one discrepancy and preserves its reproduction data; it does not prescribe a universal equality policy or certify that a sorted collection contains unique identifiers.

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

ECMA-402 Intl.Collator 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.