
Marks a character lost during an earlier encoding conversion.
replacement-charcontext-dependentThe visible tombstone of a character that was lost. A decoder that meets a byte sequence it cannot interpret puts this in its place, so the failure is recorded rather than silently swallowed.
From a conversion between character encodings that went wrong — text stored as one encoding and read as another. Every occurrence marks a character that no longer exists.
Never, in the sense that it is never what the author wrote. But removing it does not bring the lost character back, and deleting it destroys the evidence of where the damage is.
TraceFree PRO therefore asks rather than acting. The right fix is usually upstream: find the original file and decode it correctly.
| Preset | Action |
|---|---|
conservative | asked about |
default | asked about |
report-only | asked about |
strict | asked about |
Context guards can only ever make a cleanup gentler, never sharper. A rule saying “always remove” does not override them.
In TraceFree PRO, turn on the clipboard watcher and copy the text. On the command line:
tracefree clean --backup document.txt
pbpaste | tracefree clean | pbcopyReport without changing anything — exit code 1 on findings, so it works in CI:
tracefree check -r ./docsThis page never prints the character itself, only ways of writing it. A page about invisible characters that contained invisible characters would be unreviewable — and that is the problem the program exists to solve.
| Notation | Value |
|---|---|
| Unicode | U+FFFD |
| Rust | \u{FFFD} |
| JavaScript, Python | \uFFFD |
| HTML | � � |
| Regex (PCRE, Rust) | \x{FFFD} |
Paste anything into the browser demo and see what is in it. Same engine as the app, running entirely on your device — nothing is uploaded.

