Blog

Kashmiri in Unicode: The Letters and Vowel Signs Urdu Doesn't Have

Faizan Ayoub · 8 October 2026 · 8 min read

  • Unicode
  • Kashmiri script
  • NLP
Large black Nastaliq calligraphy on cream paper with small marginal notes
Nastaliq calligraphy by Muʻjiz Raqam Khan Qandahari, Delhi, mid-19th century — the script Kashmiri is written in today.Muʻjiz Raqam Khan Qandahari, Public domain, source

Key takeaways

  • Perso-Arabic Kashmiri uses the Urdu letter set plus characters of its own, chiefly U+0620 Kashmiri yeh, which marks palatalisation, and the vowel mark U+065F wavy hamza below.
  • Since Unicode 16.0, Kashmiri yeh has its own joining group with ringless final and isolated forms, and Unicode says U+06CD should not be used for it.
  • Unicode normalisation does not merge Kashmiri variants such as deprecated U+0673 and alef plus U+065F, so search and NLP pipelines need a Kashmiri-specific folding step.
Contents
  1. The Kashmiri-specific letters and vowel signs
  2. Kashmiri yeh and the wavy hamza
  3. Deprecated forms and normalisation
  4. Kashmiri in Devanagari
  5. Locales: ks, ks_Arab and ks_Deva in CLDR
  6. Why this matters for search and machine translation
  7. Sources

Kashmiri in Perso-Arabic script uses the Urdu letter set plus a few characters of its own, chiefly U+0620 ARABIC LETTER KASHMIRI YEH, which marks palatalisation, and the vowel mark U+065F ARABIC WAVY HAMZA BELOW. In Devanagari, Unicode has a set of Kashmiri vowel letters and vowel signs (U+0973–U+0977 and their matras). Several of these characters can be typed in more than one way, and Unicode normalisation does not merge the variants, so the same word can end up stored as different code points in different texts.

This post lists the characters, explains the two that cause most trouble (Kashmiri yeh and the wavy hamza), and sets out what that means for anyone searching, filtering or training models on Kashmiri text. Every code point and name below was checked against the Unicode 18.0.0 character database (UnicodeData.txt and NamesList.txt) as of October 2026.

The Kashmiri-specific letters and vowel signs

Unicode does not have a separate Kashmiri block. Kashmiri characters sit in the main Arabic block (U+0600–U+06FF), next to the letters used for Arabic, Persian, Urdu, Sindhi and others. The table gives the characters that Unicode's own annotations tie to Kashmiri, plus those that appear in the Unicode CLDR exemplar set for Kashmiri (ks) but not in ordinary Urdu.

CharacterCode pointUnicode nameRole in Kashmiri
ؠU+0620ARABIC LETTER KASHMIRI YEHMarks that the preceding consonant is palatalised. Added in Unicode 6.0.
◌ٟU+065FARABIC WAVY HAMZA BELOWCombining vowel mark; can sit under many letters. Added in Unicode 6.0.
ٲU+0672ARABIC LETTER ALEF WITH WAVY HAMZA ABOVEAnnotated “Baluchi, Kashmiri”. Appears in the Kashmiri name of the language.
ٳU+0673ARABIC LETTER ALEF WITH WAVY HAMZA BELOWDeprecated. Use U+0627 ALEF + U+065F WAVY HAMZA BELOW instead.
ۄU+06C4ARABIC LETTER WAW WITH RINGVowel letter; annotated “Kashmiri”.
ۆU+06C6ARABIC LETTER OEVowel letter; in the CLDR Kashmiri exemplar set.
◌ٗU+0657ARABIC INVERTED DAMMAVowel mark; annotated “Kashmiri, Urdu”.
◌ٖU+0656ARABIC SUBSCRIPT ALEFVowel mark; in the CLDR Kashmiri auxiliary set.

Two rows need a note. The U+0672 entry refers to CLDR's Kashmiri name for Kashmiri, کٲشُر, which is spelled KEHEH, U+0672, SHEEN, DAMMA, REH. U+0657 and U+0656 are shared with Urdu; they are in the table because Kashmiri uses them far more, not because they are unique to it. The Unicode Standard's Arabic chapter also notes that Kashmiri uses U+0654 ARABIC HAMZA ABOVE and U+0655 ARABIC HAMZA BELOW as vowel marks for /ə/ and /ɨ/. Kashmiri text should use these combining marks even where a precomposed letter with hamza already exists, for example after beh, hah or reh.

The rest of the alphabet is the Urdu set: U+06CC ARABIC LETTER FARSI YEH, U+06D2 ARABIC LETTER YEH BARREE, U+06C1 ARABIC LETTER HEH GOAL, U+06BE ARABIC LETTER HEH DOACHASHMEE, U+06A9 ARABIC LETTER KEHEH, the retroflex letters U+0679, U+0688 and U+0691, and the rest.

Kashmiri yeh and the wavy hamza

Both characters were proposed together in L2/09-215 (WG2 N3673), dated 14 May 2009, by Deborah Anderson, Roozbeh Pournader, Muzaffar Aazim and Kamal Mansour. India's national body asked separately for a wavy hamza below in its ballot comments, recorded in WG2 N3716. That document notes that both characters had been added to an amendment of ISO/IEC 10646, and they were encoded in Unicode 6.0.

Two shapes, one code point

Kashmiri yeh has two shapes. At the start or in the middle of a word it looks like a yeh with a small ring below; Kashmiri writers call this gol ye ("round ye"). At the end of a word it is a short, truncated tail with no ring, called taler ye ("half ye"). The 2009 proposal treated the ringless form as a Nastaliq variant, and the Unicode Standard repeated that advice. As a result, many Naskh fonts drew the ringed form at the end of words.

Manish Goregaokar's Report on Kashmiri Yeh (L2/23-273, 18 November 2023) found that the native speakers he consulted did not consider a word-final gol ye correct in either style. It also found that a lot of digital Kashmiri text used U+06CD ARABIC LETTER YEH WITH TAIL, a Pashto letter, to get the half-ye shape at the end of words. The report notes that this substitute had spread to CLDR's Kashmiri data, Bing Translate output and the default Kashmiri Gboard keyboard on Android. The speakers he consulted saw the substitute as a workaround, not as the right letter.

A follow-up proposal, Fixing the Kashmiri Yeh (L2/24-152, 23 June 2024) by Goregaokar and Pournader, asked for three changes: a half-ye representative glyph for U+0620, a new joining group of its own (KASHMIRI YEH), and revised text in the core specification. It also recommended that keyboards offer a single Kashmiri yeh key, that systems holding Kashmiri text replace YEH WITH TAIL with KASHMIRI YEH, and that writers use ZERO WIDTH NON-JOINER (U+200C) to force a half ye in the middle of a word.

Here is what the Unicode records show. In ArabicShaping.txt for 15.1, U+0620 is in the joining group YEH. From 16.0 onwards it is in its own joining group, KASHMIRI YEH. The current core specification, chapter 9, now says the final and isolated forms are truncated yeh shapes without the ring. It adds that the earlier Naskh/Nastaliq advice "was erroneous". In the 18.0 names list, U+0620 is annotated "used in Kashmiri to represent half ye / taler ye". U+06CD is annotated "should not be used in Kashmiri to represent half ye / taler ye". Fonts and keyboards are updated separately from the standard, so what you see on a given device depends on its fonts.

You can see the letter at the end of a word in CLDR's Kashmiri name for English, اَنگیٖزؠ, whose final letter is U+0620.

Deprecated forms and normalisation

The wavy hamza created a duplicate. Unicode already had U+0673 ARABIC LETTER ALEF WITH WAVY HAMZA BELOW, a single precomposed character, so after 6.0 the same letter could be written either as <U+0673> or as <U+0627, U+065F>. Unicode's stability policy does not allow a decomposition to be added to an existing character. The 2009 proposal therefore asked for U+0673 to be deprecated, and it is: PropList.txt gives it the Deprecated property, and the names list says "use the sequence 0627 065F instead".

The two spellings are not canonically equivalent. NFC, NFD, NFKC and NFKD all leave U+0673 as it is, so normalising text does not merge it with the recommended sequence. The core specification warns that legacy Kashmiri data may still contain U+0673. The same is true of the other look-alikes that turn up in Kashmiri text:

  • U+064A ARABIC LETTER YEH and U+06CC ARABIC LETTER FARSI YEH. Kashmiri, like Urdu and Persian, uses FARSI YEH. Arabic-layout keyboards produce U+064A. The two look the same at the end of a word but differ in the middle (U+06CC keeps its dots only in initial and medial forms) and are separate code points.
  • U+06CD YEH WITH TAIL and U+0620 KASHMIRI YEH, for the half ye. The 2024 proposal also notes U+06C1 HEH GOAL being used for this. HEH GOAL is a real Kashmiri letter, so it cannot be replaced wholesale.
  • U+0643 ARABIC LETTER KAF and U+06A9 ARABIC LETTER KEHEH. CLDR's Kashmiri exemplar set uses KEHEH. Arabic keyboards give KAF.

Standard normalisation does not merge any of these pairs. A Kashmiri-specific folding step has to do it.

Kashmiri in Devanagari

Kashmiri is also written in Devanagari. Unicode 6.0 added Kashmiri vowels to the Devanagari block. The Unicode Standard's chapter 12 says to use the encoded independent vowels U+0973–U+0977, not their look-alike sequences of U+0905 DEVANAGARI LETTER A plus a vowel sign.

IndependentCode point and nameVowel signCode point and name
ॳU+0973 DEVANAGARI LETTER OE◌ऺU+093A DEVANAGARI VOWEL SIGN OE
ॴU+0974 DEVANAGARI LETTER OOE◌ऻU+093B DEVANAGARI VOWEL SIGN OOE
ॵU+0975 DEVANAGARI LETTER AW◌ॏU+094F DEVANAGARI VOWEL SIGN AW
ॶU+0976 DEVANAGARI LETTER UE◌ॖU+0956 DEVANAGARI VOWEL SIGN UE
ॷU+0977 DEVANAGARI LETTER UUE◌ॗU+0957 DEVANAGARI VOWEL SIGN UUE

The names list also marks U+090E DEVANAGARI LETTER SHORT E and U+0912 DEVANAGARI LETTER SHORT O, with their vowel signs U+0946 and U+094A, as used for Kashmiri and the Bihari languages.

Locales: ks, ks_Arab and ks_Deva in CLDR

The Unicode Common Locale Data Repository (CLDR) holds the locale data used by operating systems and libraries: language and country names, date formats, and the expected character set. As of CLDR 48.2 it has five Kashmiri files: ks, ks_Arab, ks_Arab_IN, ks_Deva and ks_Deva_IN. Plain ks resolves to ks_Arab_IN in likelySubtags.xml, so Perso-Arabic is the default script. The ks_Arab file is empty and inherits everything from ks. ks_Deva was added in CLDR 37 (2020). In CLDR's coverage file, both ks and ks_Deva are at the "basic" level. In web content and BCP 47 language tags, the same codes are written with hyphens: ks, ks-Arab, ks-Deva.

The exemplar sets show the state of the data. The ks exemplar set includes U+0620, U+0672, U+06C4 and U+06C6, and lists U+065F in its auxiliary set. The ks_Deva set is marked "contributed" and, as of 48.2, does not include U+0973–U+0977 or the Kashmiri vowel signs in the table above. Software that checks Devanagari Kashmiri text against CLDR exemplars will not expect those characters.

Why this matters for search and machine translation

Search. A user who types a word with U+064A or U+06CD will not find a document that spells it with U+06CC or U+0620, unless the search engine folds them together. Kashmiri text online comes from many keyboards, mixes these variants, and normalisation does not help. Search systems need a small Kashmiri folding table applied to both the index and the query.

Dataset filtering. Our corpus pipeline keeps a pair only if more than 20% of the Kashmiri side is Perso-Arabic script. Every character in the first table is in the Arabic block, so a filter on the Unicode range keeps them. The same filter drops Devanagari Kashmiri, because it is built for Perso-Arabic. Counting a list of "Urdu letters" instead would misjudge Kashmiri rows. A script filter does not tell Kashmiri from Urdu either; that needs language identification.

Tokenisation. Subword tokenisers learn from character sequences. If the same word arrives as <U+0673> in one sentence and <U+0627, U+065F> in another, or with U+06CD in one place and U+0620 in another, the tokeniser sees two different strings and splits them differently. The model then needs more data to learn what is really one word. Tokenisers trained mostly on other languages already break Kashmiri into many pieces: our ICRTC-2026 paper reported 5.89 Mistral tokens per Kashmiri word against 1.45 per English word (see our research page). Those figures are as reported and are being re-tested in follow-up work in 2026. Inconsistent encoding makes a bad ratio worse.

A practical folding step for Perso-Arabic Kashmiri, to run before training or indexing:

  1. Apply NFC.
  2. Replace U+0673 with U+0627 U+065F.
  3. Replace U+064A with U+06CC, and U+0643 with U+06A9, when the text is known to be Kashmiri.
  4. Replace word-final U+06CD with U+0620, as the 2024 proposal recommends for stored data. Check a sample first, and do not touch U+06C1.
  5. Keep the original text alongside, so the folding can be revised later.

Correct input matters as much as cleaning. For how to type these characters, see our guide to Kashmiri keyboards. Older Kashmiri material is often in legacy InPage encodings rather than Unicode; our digitisation page describes the converter we are planning for that.

Sources

Speak Kashmiri?

Help us find where computer translation still fails Kashmiri. Mark 25 sentences, three translations each; your answers save as you go.

← All posts