Unicode Scripts: How Writing Systems Are Classified

· 2 min read

Unicode assigns every character not just to a block but also to a script—a named writing system. Scripts are a fundamental concept in Unicode, used by font rendering engines, spell checkers, input method editors, and security algorithms. Understanding scripts helps you work correctly with multilingual text.

Scripts vs Blocks vs Languages

A script is a writing system, independent of any specific language. Latin is a script used by English, French, German, Vietnamese, and hundreds of other languages. Blocks are code-space regions; a script can span multiple blocks. And a single language might use multiple scripts (Serbian is written in both Cyrillic and Latin). Browse the full scripts catalogue to see all Unicode-recognised writing systems.

The Script Property

Each Unicode character has a Script property. Common values include Latn (Latin), Grek (Greek), Arab (Arabic), Hans / Hant (Simplified / Traditional Chinese), Jpan (Japanese), Kore (Korean), and Zyyy (Common—for characters used across many scripts like digits and punctuation).

Two special script values are worth noting: Zinh (Inherited) for characters like combining diacritical marks that inherit the script of the preceding base character, and Zzzz (Unknown) for unassigned code points.

Security: Mixed-Script Spoofing

Because many scripts contain characters that look similar to Latin letters, attackers register domain names or usernames with visually identical but technically different characters. The Cyrillic small letter а (U+0430) looks identical to the Latin small letter a (U+0061) in most fonts. A domain like "paypal.com" spelled with Cyrillic characters is a different domain entirely. This is why browsers highlight suspicious mixed-script domain names.

You can use the character comparison tool to see how visually similar characters from different scripts differ in their Unicode properties. The article on confusable characters explores this topic in depth.

Right-to-Left Scripts

Scripts like Arabic, Hebrew, Persian, and Thaana are written right-to-left. Unicode handles bidirectional text through the Unicode Bidirectional Algorithm (UBA), which uses properties like bidi_class on each character to determine rendering direction. Understanding this is essential when mixing LTR and RTL text in a single paragraph.