What the Unicode Script Detector does
This detector tells you which writing systems a piece of text uses - Latin, Cyrillic, Greek, Arabic, Hebrew, Devanagari, Han, Hiragana, Katakana, Hangul, Thai and dozens more - by looking up each character's Unicode Script property. It then finds the things that are hard to see: words that mix scripts, Cyrillic or Greek letters posing as Latin ones, zero-width and other invisible characters, special spaces, and bidirectional controls that can make text display in a different order from how it is stored.
Use it to check a suspicious link or sender name, clean text pasted from a PDF or a chat app, prepare copy for translation, or review source code for hidden bidi characters. It runs in your browser with the browser's own Unicode tables, and produces a cleaned copy with the characters you choose removed.
How to use it
- Paste the text or drop a text file. Results update as you type.
- Read the script breakdown. Letters and digits are counted by script; punctuation, spaces and symbols belong to the Common script and combining marks to Inherited, so they are left out of the shares.
- Check the findings. Look-alike words are listed with the Latin word they imitate; mixed-script words show which scripts they combine; unterminated bidi controls are flagged by line.
- Look at the revealed text: every invisible character is shown as its code point in brackets, such as ⟦200B⟧ for a zero-width space, coloured by kind. The table gives each one's line, column and Unicode name.
- Choose what to remove under Cleaning options, then copy or download the cleaned text. Joiners that emoji sequences or scripts such as Persian need are kept unless you change that.
Reading the results
A mixed-script word combines letters from more than one script. The page follows the Unicode "highly restrictive" rule from UTS #39: a word may mix Latin with Han, Hiragana and Katakana (Japanese), with Han and Bopomofo (Chinese) or with Han and Hangul (Korean); any other mixture is flagged.
A look-alike word contains Cyrillic or Greek letters that look like Latin ones - "а" (U+0430) instead of "a", "ѕ" (U+0455) instead of "s". The "Looks like" column is the word with those letters replaced by their Latin twins.
Legitimate joiners are zero-width joiners inside emoji sequences, variation selector-16 after an emoji, and zero-width non-joiners between letters in scripts that use them. They are shown but not counted as problems.
Worked example: a phishing message with a look-alike link
Load the look-alike login link. The text has 85 letters: 82 are Latin and 3 are Cyrillic, so the dominant script is Latin at 96.5%. Those 3 letters are the whole story.
The domain "раypal.com" starts with Cyrillic р (U+0440) and а (U+0430), and "ѕupport" starts with Cyrillic ѕ (U+0455). Both words are flagged as mixed Latin + Cyrillic and as look-alikes of "paypal" and "support". A zero-width space (U+200B) sits after "24 hours.", at line 1, where it could split or disguise a word.
The cleaned text removes the zero-width space. It does not rewrite the Cyrillic letters, because a real Russian or Serbian word would be damaged - look-alikes are something to report, not to "fix" silently.
Why hidden bidi characters matter in code
Unicode's bidirectional algorithm lets Arabic and Hebrew mix with left-to-right text. Explicit controls such as RIGHT-TO-LEFT OVERRIDE (U+202E) and the isolates (U+2066-U+2069) change the display order. In 2021, researchers showed that placing them inside comments and strings can make source code look different to a reviewer than to the compiler - the "Trojan Source" technique, CVE-2021-42574.
The "Hidden bidi in code" example shows the pattern: an override and isolates on line 1 that are not closed on that line. This page flags any line where embeddings, overrides or isolates are left open, which is the condition most code-review tools now warn about.
Limitations: what the result does not prove
- Script is not language. Latin covers English, French, Vietnamese and hundreds more; Cyrillic covers Russian, Ukrainian, Serbian and others. Use this to see writing systems, not to identify the language.
- The look-alike list is a small, explicit set of Cyrillic and Greek letters that resemble Latin, not the full Unicode confusables data. Other look-alikes, such as mathematical alphanumerics or digits, may not be recognised.
- Script data comes from your browser's JavaScript engine. Very new characters may show as Unknown in an older browser.
- Removing invisible characters can change meaning in scripts that rely on joiners, and removing bidi marks can change how right-to-left text displays. Check the cleaned text before you use it.
Privacy: where your data goes
Everything you paste, type or drop is processed in this browser tab. It is not uploaded, logged, stored or sent to analytics. Session recording and tag-manager scripts are switched off on this page.
Standards and sources
- Unicode Standard Annex #24 - Script Property - checked 19 Sep 2026
- Unicode Standard Annex #9 - Bidirectional Algorithm - checked 19 Sep 2026
- Unicode Technical Standard #39 - Security Mechanisms (restriction levels)
- Trojan Source: Invisible Vulnerabilities (CVE-2021-42574)
Frequently asked questions
How do I check if a link uses fake letters?
Paste the link or the sender name here. Any Cyrillic or Greek letter that imitates a Latin one is flagged, the word is shown with its Latin look-alike, and each letter's code point is listed. A genuine English domain name should be all Latin.
What is a zero-width space and why is it in my text?
U+200B is a character with no width that marks a possible line break. It often arrives with text copied from web pages, PDFs or messaging apps, and can break searches, passwords and code. It appears here as ⟦200B⟧ and is removed in the cleaned text.
What is the difference between Common and Latin script?
Latin covers letters such as a-z and their accented forms. Common covers characters shared by many writing systems - digits, spaces, most punctuation and symbols - and Inherited covers combining marks that take the script of the letter they follow. That is why only letters and digits are counted in the breakdown.
Is mixing scripts in one word always suspicious?
No. Japanese routinely mixes Han, Hiragana and Katakana, and brand names mix Latin with CJK characters. Those combinations are allowed by the Unicode rule used here. A word mixing Latin with Cyrillic or Greek, though, is almost always a mistake or a spoof.
Which characters does the cleaner remove?
By default: zero-width characters other than legitimate joiners, bidirectional controls, soft hyphens, tag characters and control codes; no-break and special spaces become normal spaces. Variation selectors are kept unless you tick that option, because removing them changes how some emoji look.
Can hidden characters really change how code runs?
They cannot change what the compiler sees, but bidirectional controls can change what a human reviewer sees, so malicious logic can pass review. Zero-width characters in identifiers can also create two names that look identical. That is why editors and code hosts now warn about them.
Last reviewed by the A2Z.Tools team against the sources listed above.