Urdu is written in the Nastaliq style of the Perso-Arabic script. While it shares most of its letters with Arabic and Persian, Urdu adds a handful of characters to capture South Asian sounds — chiefly the retroflex consonants, a nasalisation marker, two distinct forms of he, and the word-final bari ye. This reference lists those Urdu-specific letters with their Unicode code points, names, transliterations, and the sounds they represent, so you can identify, type, and encode them correctly.
How Urdu extended the Arabic script
When the Arabic script was adopted for Urdu (then called Hindi or Hindustani), the existing Arabic and Persian letters were sufficient for some sounds but not for the retroflex consonants that are pervasive in South Asian languages. Scribes solved this by taking an existing letter and adding a small marking above it — typically a superscript toey shape (resembling a small ط) — to signal the new sound. This is why the retroflex letters look like their dental counterparts at first glance.
Each Urdu-only letter has a distinct Unicode code point, not a variant presentation of its Arabic base. Using the wrong code point — typing Arabic ه (U+0647) instead of Urdu ہ (U+06C1), for example — produces text that looks identical in many fonts but breaks Urdu spell-checkers, search indexes, and NLP models trained on properly encoded text.
The Urdu-specific letters
Retroflex consonants
| Letter | Name | Unicode | Sound | Derived from |
|---|---|---|---|---|
| ٹ | Tte | U+0679 | /ʈ/ — retroflex t | ت (Arabic ta) + superscript marking |
| ڈ | Ddal | U+0688 | /ɖ/ — retroflex d | د (Arabic dal) + superscript marking |
| ڑ | Rre | U+0691 | /ɽ/ — retroflex flap r | ر (Arabic ra) + superscript marking |
Retroflex consonants are produced with the tongue tip curled back toward the palate (post-alveolar). They contrast minimally with the dental sounds — pal (moment) vs paal (to rear/nurture), for example — making correct encoding essential for dictionary lookups and text-to-speech systems.
Nasalisation
| Letter | Name | Unicode | Function |
|---|---|---|---|
| ں | Noon ghunna | U+06BA | Nasalises the preceding vowel; never followed by a vowel of its own |
Noon ghunna (dotless nun) marks nasal vowels. It looks like ن (noon) without the dot. Encoding ن where ں is needed adds a consonant that does not belong and changes the word’s meaning.
The two forms of he
This is the single most common encoding error in Urdu digital text:
| Letter | Name | Unicode | Role |
|---|---|---|---|
| ہ | Gol he (“round he”) | U+06C1 | Represents the /h/ sound; also used as a vowel carrier for certain long vowels |
| ھ | Do-chashmi he (“two-eyed he”) | U+06BE | Used only to mark aspiration — it always follows a consonant to form an aspirated digraph |
Do-chashmi he is never pronounced on its own. It combines with a preceding consonant: بھ (bh), پھ (ph), تھ (th), کھ (kh), and so on. Substituting گول ہے for do-chashmi he in an aspirated digraph produces unreadable text — the characters are distinct code points that render differently in fonts designed for Urdu.
The two forms of ye
| Letter | Name | Unicode | Use |
|---|---|---|---|
| ی | Choti ye (“small ye”) | U+06CC | Used initially, medially, and as the long /iː/ vowel |
| ے | Bari ye (“big ye”) | U+06D2 | Used only at the end of a word; represents the long /eː/ or /æː/ vowel |
Bari ye is one of the most visually distinctive Urdu letters — it has a distinctive swooping tail that extends below the baseline and is never joined on the right. Using ی at word-end where ے is required is another frequent encoding error; the words look similar in many fonts but are different Unicode characters.
Practical encoding tips
- Always use a keyboard layout or input method designed for Urdu, not Arabic. Arabic keyboards may produce Arabic code points that look identical to Urdu ones.
- When importing Urdu text from older sources (printed OCR, legacy encodings), run a normalization pass to replace Arabic heh (U+0647) with the appropriate Urdu form.
- For development and testing, the code-point column in this table gives you the exact hexadecimal value to use in a string literal or Unicode escape:
ہfor gol he,ھfor do-chashmi he, and so on.