Skip to content
Ghostchars

Lookalike letters

CYRILLIC SMALL LETTER A (U+0430)

The Cyrillic letter a. In almost every font it is drawn identically to the Latin letter a, and it is a completely different codepoint.

Codepoint
U+0430
Removed by default
No
Governing option
Lookalike letters --confusables
Can be load-bearing
No

Where it comes from

Russian, Ukrainian, Bulgarian and Serbian text, obviously. In Latin words it comes from a Cyrillic keyboard layout left on, from a copy-paste out of mixed text, and from deliberate substitution — domain spoofing, filter evasion, and homoglyph steganography, which encodes bits by swapping Latin letters for lookalikes.

Why it matters

A single swapped letter defeats every exact-match check while remaining invisible to the reader. It is how "pаypal.com" gets registered, how a banned word slips past a filter, and how a hidden bit gets stored in a word.

Before and after

BeforepU+0430ypal
Afterpaypal

One Cyrillic letter in an otherwise Latin word. The rendering is identical; the string is not.

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

In Russian, Ukrainian, Bulgarian, Serbian and every other language written in Cyrillic — that is, in a very large amount of perfectly ordinary text.

How to remove it

Turn on Lookalike letters (`--confusables`) and it is replaced with Latin "a". Be careful: that option maps 1,513 codepoints to Latin and will destroy genuine Cyrillic, Greek, Armenian and Cherokee text. Use it when you know the text is meant to be Latin.

Is it an AI watermark?

Not a watermark

No. A Cyrillic letter in a Latin word is either a keyboard artefact or a deliberate substitution by a person. Language models do not insert homoglyphs as marks; they produce them only when the surrounding text is genuinely Cyrillic.

No connection to machine-generated text. It comes from software, from a keyboard, or from a person.

Questions

Is this how lookalike domains work?

Yes. An internationalised domain name can contain Cyrillic letters that render like Latin ones. Browsers defend against this by showing the punycode form when a name mixes scripts.

Will `--confusables` destroy Russian text?

Yes. The option maps lookalikes to Latin unconditionally, so Russian, Greek, Armenian and Cherokee text is destroyed by it. That is why it is off by default and why the toggle says so.

How do I find them without changing anything?

Reveal the text rather than cleaning it. Every confusable is listed with its position, its codepoint and the Latin letter it imitates, and nothing is modified.

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