Skip to content
Ghostchars

Bidirectional marks

RIGHT-TO-LEFT MARK (U+200F)

The mirror of U+200E: an invisible character with strong right-to-left direction, used to resolve ambiguity in mixed-direction text.

Codepoint
U+200F
Removed by default
When free-floating
Governing option
Bidi marks --bidi
Can be load-bearing
Yes

Where it comes from

Hebrew and Arabic documents, localisation pipelines that wrap variables defensively, and the same LRM/RLM steganography scheme.

Why it matters

It is invisible and it changes layout, so a stray one in a left-to-right paragraph can nudge punctuation to the wrong side of a line for no visible reason. In an English paragraph it is pure padding.

Before and after

Beforeprice: 100U+200F.
Afterprice: 100.

In an English sentence the mark only moves the full stop around; there is no right-to-left text for it to help.

The character is shown as a labelled chip so you can see where it sits. In your text it draws nothing at all.

When it is legitimate

Next to right-to-left text — most often after a variable or a number embedded in an Arabic or Hebrew sentence, to stop the punctuation drifting.

How to remove it

Removed by the default pass when no neighbour is right-to-left; kept and reported when one is. `--bidi` removes it in both cases.

Is it an AI watermark?

Used to hide data — not a watermark

No. Half of a two-symbol invisible alphabet, and also a legitimate bidi hint. Neither reading involves a language model.

A known carrier for deliberately hidden payloads. Someone put it there on purpose, which is a different question from who wrote the words.

Questions

Why does my full stop jump to the wrong side?

Punctuation takes its direction from the surrounding text. A stray right-to-left mark changes that context, which is exactly the bug these marks are meant to fix — and cause.

Is Arabic text safe?

Yes with the defaults: a mark adjacent to Arabic is kept. Only `--bidi` removes it.

Check your own text

Paste anything into the cleaner to see every hidden character it contains, with position, codepoint and what happens to each one. Nothing is uploaded.

Check your own textAll characters