How to find homoglyph characters on Mac
You can do this with Note My. Here is how to scan a file for look-alike letters, see exactly which character is wrong, and correct it without breaking text that was meant to be there.
You have a variable name, a URL, a config key or a password that looks exactly right and is refused every time. The comparison fails. The lookup returns nothing. Copying the string into a search box finds no match, even though the word is plainly on screen. A common cause is that the string contains a letter from another alphabet: a Cyrillic or Greek character that draws the same shape as the Latin one you meant to type.
This guide covers how to make Note My show you those letters, what it tells you about each one, and how to put each one right with confidence.
This all happens on your Mac. Nothing is uploaded, there is no account, and the file never leaves the machine — which matters when the string you are checking is a credential.
What a homoglyph is, and why you cannot see it
A homoglyph is a character from one script that renders as the same shape as a character from another. Latin a and Cyrillic а are different characters with different code points, different sort order and different bytes on disk — and in most typefaces they are drawn identically. There is nothing wrong with your eyes. At body size, in a monospaced font, on a good display, the two are the same picture.
That is the whole problem. Every other class of hidden character is invisible: a zero-width space occupies no width, a bidi control draws nothing. A homoglyph is worse, because it draws something, and what it draws is a lie. You will read the line a dozen times and confirm each time that it says total.
They arrive the ordinary ways: text pasted out of a rendered document, a slide, a PDF or an AI chat; a password typed on a keyboard laid out for another script; a domain name registered with a mixed alphabet on purpose.
The letters the scan knows about
Our hidden-character scanner has a category called Homoglyph letters. It covers the Cyrillic and Greek characters that most often stand in for Latin ones — the look-alikes that turn up in identifiers, passwords and domain names, which is exactly where a swapped letter costs you an afternoon. Scan the same file twice and you get the same findings both times, which is what makes a repeat scan a reliable way to confirm a fix.
Every finding carries the exact code point of the character it found, and that is the fact you act on. A code point is unambiguous in a way that a picture of a letter never is: you can read it off the row, quote it in a commit message or a bug report, and match it against the letter you meant to type. Where the shapes argue, the code point settles it.
Homoglyph letters are report only. The app shows you where each one is and tells you exactly what it is. It never removes or replaces one, in any preset, under any setting.
How the status bar and the scan divide the work
The status bar carries a hidden-character pill that keeps watch on the document while you work. What it watches is chosen for certainty: the characters that are always wrong, the ones that can be cleared in a click without changing what the text says. That is what makes the pill worth a glance — a green Clean is a real answer about a real set of characters, and Go to Next in its popover walks you through them one at a time.
Look-alike letters sit in a different category of problem, because whether one is wrong depends entirely on the word it is standing in. So they are yours to ask for by name, and the Review All sheet is where you ask. One scan brings every one of them to the surface with its code point attached, in a table you can work down line by line.
Scan a file for look-alike letters
-
Open the Review All sheet
From the toolbar Clean menu, choose Clean ▸ Clean Invisible / Special Characters…. The sheet opens over the document with a scope control reading Selection or Whole Document, a Preset pop-up, and a Scan button.
-
Turn the homoglyph category on
The left-hand table lists all twenty-one categories with a checkbox each. Tick Homoglyph letters. The preset pop-up flips to Custom as soon as you touch a checkbox, which is what you want — it means the sheet is now scanning for exactly what you asked for.
The Aggressive preset also includes the category, along with the other twenty, but it is a blunter choice: it additionally enables smart-punctuation transformation, so curly quotes, dashes and ellipses become candidates for rewriting. Ticking the one category is safer.
-
Set the scope and scan
Choose Whole Document unless you have a line selected, then press Scan. Our large-file engine keeps even a very long document in scope, so a log, a dump or a whole exported dataset is fair game here. Line numbers in the results match the line numbers in the editor, whichever scope you scanned in.
-
Read the findings table
The right-hand table lists every finding with five columns: Line:Col, Code Point, Category, Action and Risk. A homoglyph row names its code point and shows an informational action — the app is telling you what it found, not offering to change it.
-
Double-click a finding to see it in the text
Double-clicking a row reveals it in the editor behind the sheet. Show in Editor in the footer does the same for the row you have selected.
The underline drawn in the text
A scan marks what it found in the text itself, and the mark differs by category. Homoglyph letters get an underline, the same mark as smart punctuation; zero-width and control characters get a slug, the space family a background tint, trailing whitespace a bar.
Because the marks differ by category, one scan reads at a glance: an underline in the middle of a word is a look-alike letter, a slug is something with no width at all, a tint is a space that is not the space you assumed. You can work down the findings table and read the text at the same time, and the two agree with each other row for row.
The underline is what finally makes the character visible: it sits under one letter in the middle of a word that otherwise looks unremarkable. Markers pulse briefly when revealed, then settle to a lower emphasis so they stay findable while you work; with Reduce Motion on, the pulse is skipped and the settled state applied at once.
Two things clear the marks. Closing the sheet drops them deliberately, and editing the text drops them too, so a mark never sits pointing at a spot the character has moved away from. The rhythm to settle into is therefore: scan, fix one, scan again, which confirms each fix as you go. If you see no marks at all, check Settings ▸ Text Cleanup ▸ Highlight findings, which is on by default and is the switch that draws them.
Why the correction stays yours
Apply, in the sheet's footer, acts on findings that carry a change to make, and it counts them for you in Apply (N). Look-alike letters are reported rather than rewritten, so a scan for them alone leaves Apply quiet and your text exactly as you left it.
The reason is simple: only you know what the word was meant to say. A Cyrillic о inside token is a bug. The same character inside a Russian word in a comment, a test fixture or a translation file is the correct letter, and rewriting it quietly would ruin the file. So you get the line, the column and the code point — everything needed to make the call in a second — and the letter waits for you.
That is what makes the scan safe to run at any moment: on a file you are halfway through, on a config you have not committed, on a string you are about to paste into a login form. Nothing shifts under you, so you never have to weigh finding the problem against risking the file.
Fixing one by hand
The reliable fix is the boring one. Reveal the finding, select the underlined character, delete it and type the letter you meant. Rescan to confirm the count went down.
For a character that appears many times, our find and replace is faster, with one precaution: do not type the character into the find field. Your keyboard will produce the Latin letter, which is the one that is already correct. Copy the offending character out of the document, paste it into the find field, tick Case Sensitive, and replace. Keep the scope on This File unless you have checked every other tab; the button labelled Replace in All Files works across your open tabs, which keeps a sweeping replacement inside the set of files you can actually see.
Find & Replace opens from the magnifying-glass button in the toolbar, as a popover that floats beside your text rather than pushing the document down the window. The line you are fixing stays where it is while you work on it.
To find the same character across a project without changing anything, use Search ▸ Find in Folder… (⇧⌘F). It searches every text file under a folder you choose, groups results by file, and opens one at the line on a double-click. It is read-only by design, so it is a safe way to size up the damage before you start editing.
When you are done, scan once more with the homoglyph category still ticked and confirm the findings table is empty. An empty table is a real answer: the letters are ruled out, and you can carry on with one fewer suspect.
Two counters that catch a look-alike early
You do not always need a scan. Double-click an identifier and every occurrence of it is highlighted, matched as a whole word rather than as a fragment. If one instance in the file stubbornly refuses to light up with the rest, that instance is not the same string — and a look-alike letter is the usual reason.
The Occ pill in the status bar puts a number on the same idea: it counts how many times your current selection appears in the file. Select a name you expect twelve of, read eleven, and you have found the problem without opening anything. It is at its best on exactly the things you tend to be chasing: identifiers, config keys, short strings and single words.
What else the same scan turns up
Homoglyphs travel with company, and two of their neighbours are report-only for the same reason.
| Category | What it means for an identifier |
|---|---|
| Non-NFC clusters | A letter written as a base plus a combining mark rather than as one composed character. Looks identical, compares unequal. Flagged as a warning, and the sheet offers you the corrected form. |
| Combining marks | The marks themselves. Reported, never removed automatically. |
| Zero-width characters | Invisible, always wrong, removable in one click. |
| Bidi control characters | Reorder how text is displayed without changing what it says. Always wrong, flagged at danger severity. |
If an identifier still misbehaves after the homoglyph scan comes back empty, tick those categories and scan again — a non-NFC cluster produces exactly the same symptom.
Troubleshooting
The scan found nothing and the string still fails
Three things to check, in order. Confirm the scope was Whole Document and not Selection. Tick the zero-width, combining-mark and non-NFC categories and scan again, because they produce the identical symptom. Then put the failing string and a known-good copy of it on two lines of the same document, select the name or key on one of those lines and read the Occ pill: two means the copies match character for character, one means you have just found which of them carries the surprise.
The status bar says Clean
Green is a real result: every character the pill keeps watch on is clear, and a whole class of suspect is ruled out at a glance. Look-alike letters are the ones you call for by name: open Clean ▸ Clean Invisible / Special Characters…, tick Homoglyph letters and press Scan. Ten seconds, and you have an answer about them too — two facts about the same line, from two places you can check in a moment.
Apply is greyed out
Apply lights up for findings that carry a change to make, so a scan for look-alike letters alone leaves it resting — those corrections are a keystroke from you rather than a click from the sheet. Tick a removable category such as zero-width characters as well, and Apply comes back for that part of the work while the letters stay yours to judge.
The underlines vanished
Marks are cleared as soon as you edit the text, so none of them can be left pointing at a place the character has moved away from. Closing the sheet also clears them. Scan again after each fix.
Getting Find & Replace to match the character
Copy the character straight out of the document and paste it into the find field, rather than typing it — your keyboard produces the Latin letter, which is the one that was right all along. Case Sensitive is worth ticking as well, so a replacement cannot spread to a word that differs from your target only in case.
Working in a very large file
Take the scan straight to the Review All sheet. Our large-file engine keeps the whole document in scope, so tick your categories, choose Whole Document and press Scan — a very long log or export is answered the same way a short config file is, with line numbers that match the editor. How the status bar behaves on documents this size is yours to tune, in Settings ▸ Text Cleanup.
Where this earns its keep
A handful of habits turn the scan from a rescue operation into something you barely notice yourself doing.
- Check a credential before you paste it anywhere. Drop the string into a document, tick the category, scan, and you know in seconds whether the thing you are about to hand to a login form is the thing you think it is. It all happens on your Mac, so a password checked this way stays a secret.
- Scan anything that arrived from a rendered source. Text lifted from a slide, a PDF, a web page or an AI answer is worth a look before it becomes code or configuration. That is where look-alike letters come from most often, and catching one at the paste is far cheaper than finding it in a failing comparison a week later.
- Settle into scan, fix one, scan again. The findings table shrinking by one is your confirmation, and a second scan that comes back empty is the end of the matter. Repeat scans agree with each other, so an empty table means the same thing every time.
- Keep the code point as your note. It is the one description of the character that survives being typed into a commit message, a ticket or a reply to whoever sent you the file — and it tells the next person exactly what to look for.
- Size up a folder before you touch it. Once you know the character, Search ▸ Find in Folder… shows every place it landed, grouped by file and one double-click away from the line, so you know how big the job is before you start it.
The pattern underneath all five is the same. You get a fact — this character, at this line and column, with this code point — and you keep the decision about what the text should say.
Frequently asked questions
Is a homoglyph the same thing as an invisible character?
They are two sides of the same coin, and one scan covers both. An invisible character draws nothing at all — a zero-width space, a bidi control. A look-alike letter draws a perfectly ordinary letter that happens to belong to another alphabet. One is unseen, the other is misread, and ticking both sets of categories brings them into the same findings table, each row carrying its own code point.
Which preset includes homoglyph letters?
Aggressive takes in all twenty-one categories at once, homoglyph letters among them. For most work, ticking the single Homoglyph letters checkbox in the sheet's left-hand table is the better move: the preset pop-up switches to Custom, and the scan looks for exactly the one thing you are chasing, which keeps the findings table short enough to read in a glance.
Why not just replace every Cyrillic letter with its Latin twin?
Because a file that genuinely contains Russian, Ukrainian, Greek or Bulgarian text would be destroyed by that rule, and nothing but you can tell the two situations apart. That is why the category is report only and why Apply skips it.
Can I check a whole project in one pass?
Yes, once you know which character you are after. Search ▸ Find in Folder… (⇧⌘F) finds every occurrence of it across a folder tree, groups the results by file and opens any of them at the line on a double-click. It reads the files and never writes to them, so you can survey a whole project first and then fix the hits one at a time in the editor.
Will the editor's colouring show me a keyword with a look-alike letter in it?
Often, yes, and it is a useful tell. Our syntax engine gives keywords a colour of their own, and a keyword carrying a Cyrillic letter quietly loses it, so the line looks subtly off. It is only a hint, though — plenty of names take a colour whether or not every letter in them is the one you meant. Treat an uncoloured keyword as a reason to scan, not as proof.
Does anything about this check leave my Mac?
It all happens on your Mac. Nothing is uploaded, there is no account to create, and the file never leaves the machine — the app can reach only the files you open yourself. That is what makes this a sensible way to check a password, a token or an API key: the string you are testing stays on the machine you are testing it on.