CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Will this cleaner fix curly quotes around JSON keys?
No. Our JSON objects using U+201C and U+201D as delimiters still fail parsing. Curly quotes inside an ASCII-quoted string are valid and are preserved.
Open the Claude text cleaner · Full measured data
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. File API and event-lifecycle tests include an additional stage described in the analysis. We make no detector-score or statistical-watermark removal claim.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed before / after |
|---|---|---|---|
| Curly delimiters direct string / keep / invisible true | "{“x”:1}"U+007B U+201C U+0078 U+201D U+003A U+0031 U+007D | "{“x”:1}"No selected invisible characters found | {"valid":false,"errorName":"SyntaxError"}{"valid":false,"errorName":"SyntaxError"} |
| Curly content direct string / keep / invisible true | "{\"x\":\"“hello”\"}"U+007B U+0022 U+0078 U+0022 U+003A U+0022 U+201C U+0068 U+0065 U+006C U+006C U+006F U+201D U+0022 U+007D | "{\"x\":\"“hello”\"}"No selected invisible characters found | {"valid":true,"value":{"x":"“hello”"}}{"valid":true,"value":{"x":"“hello”"}} |
| Curly delimiters plus marker direct string / keep / invisible true | "{“x”:1}"U+007B U+201C U+0078 U+201D U+003A U+200B U+0031 U+007D | "{“x”:1}"Removed 1 invisible character | {"valid":false,"errorName":"SyntaxError"}{"valid":false,"errorName":"SyntaxError"} |
| ASCII delimiters direct string / keep / invisible true | "{\"x\":1}"U+007B U+0022 U+0078 U+0022 U+003A U+0031 U+007D | "{\"x\":1}"No selected invisible characters found | {"valid":true,"value":{"x":1}}{"valid":true,"value":{"x":1}} |
The position of the quote changes the result
The first input uses left and right double quotation marks as delimiters around x. JSON.parse rejects it both before and after cleanup. The second uses ASCII quotation marks to delimit the key and value, with curly quotation marks inside the value: that object parses and its content stays intact. In the mixed example a U+200B is deleted, but the remaining curly delimiters still make the object invalid. The ASCII reference parses throughout. The table records each whole object so readers can distinguish punctuation used as grammar from punctuation stored as data.
Visible punctuation is outside this repair
The homepage deletion map contains five named characters, not typographic quotation marks. Its dash option also does not convert quote characters. JSON syntax specifies U+0022 as the quotation mark delimiter. That primary rule explains why the grammar rejects a visually familiar substitute at this location. We test JSON.parse only, not permissive JavaScript object notation or an editor smart-quote setting. We did not copy these examples from a user document and do not infer which application introduced the punctuation. The outputs establish the exact unchanged sequences in this experiment.
Fix delimiters without rewriting the value
Identify the failed structural position with the destination parser and preserve the source. If delimiters were accidentally changed, correct those delimiters in a working copy and validate again. Replacing every curly quote would also modify legitimate prose such as our second value. Generate JSON with a serializer when possible instead of relying on word-processor punctuation. Even after the object parses, validate its schema and expected fields. Character cleanup cannot infer whether an opening curly quote is intended content or an accidental delimiter; the distinction requires the surrounding format and the intended value.
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.cjsReference and next check
JSON grammar 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.