Bidirectional marks
BIDIRECTIONAL ISOLATES (U+2066–U+2069)
Four invisible controls — LRI, RLI, FSI and PDI — that wrap a span of text so its direction cannot leak into the text around it. They are the modern replacement for the embedding and override controls.
- Range
U+2066–U+2069- Category
- Bidirectional marks
- Removed by default
- When free-floating
- Governing option
- Bidi marks
--bidi - Can be load-bearing
- Yes
Where it comes from
Localisation frameworks, which wrap interpolated variables in isolates so a user-supplied Arabic name cannot rearrange the English sentence around it. Also from any editor that produces correct mixed-direction text.
Why it matters
They are the right tool, which is exactly why they need care: unmatched isolates are common in text that has been cut and pasted, and they are just as invisible as the controls they replaced.
Before and after
An interpolated variable wrapped in an isolate pair — correct in the template, pointless once the value is plain English.
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
Around a span of text whose direction should not affect its surroundings. Ghostchars keeps an isolate that sits next to right-to-left text and removes one floating in a left-to-right paragraph.
How to remove it
Removed by the default pass when no neighbour is right-to-left; kept and reported when one is. `--bidi` removes them everywhere.
Is it an AI watermark?
Not a watermark
No. Isolates come from localisation frameworks and modern editors. They are evidence of good bidi practice somewhere upstream.
No connection to machine-generated text. It comes from software, from a keyboard, or from a person.
Questions
What are the four?
U+2066 LEFT-TO-RIGHT ISOLATE, U+2067 RIGHT-TO-LEFT ISOLATE, U+2068 FIRST STRONG ISOLATE (which takes the direction of the first strong character inside it) and U+2069 POP DIRECTIONAL ISOLATE, which closes any of them.
Why are they better than embeddings?
Because the text inside an isolate cannot influence the direction of the text outside it. An unterminated embedding rearranges the rest of the paragraph; an isolate cannot.
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.