ArabicFixالعربية

GUIDES / Persian letters in Arabic text

Persian ی and ک in Arabic text: why search misses them

You search a file or database for «علي» and get nothing, although the name is right there. The usual cause is a Persian yeh: a different Unicode character that looks almost identical. This guide explains how Arabic yeh and kaf differ from their Persian look-alikes, how Persian digits differ from Arabic-Indic ones, where the mix comes from, how to find and fix it, and when you should leave it alone.

Published 23 October 2026 · 7 min read

Same shape, different characters

Unicode gives every letter a fixed number and does not care what it looks like. Arabic yeh and Persian yeh are two different characters, and so are Arabic kaf and Persian keheh. Software compares those numbers, not shapes, so «علي» and «علی» are two different words and a search for one never finds the other.

LetterUnicode nameCode pointUsed in
يARABIC LETTER YEHU+064AArabic
ىARABIC LETTER ALEF MAKSURAU+0649Arabic word endings, as in «على»
یARABIC LETTER FARSI YEHU+06CCPersian, Urdu and other languages
كARABIC LETTER KAFU+0643Arabic
کARABIC LETTER KEHEHU+06A9Persian, Urdu, Sindhi

According to the Unicode Standard, Farsi yeh has two dots below in its initial and medial forms and no dots in its final and isolated forms. It looks exactly like ي at the start or in the middle of a word and exactly like ى at the end. So an Arabic reader sees «علی» as the preposition «على» (on), even when the writer meant the name «علي» (Ali).

Keheh is also known in Unicode as kaf mashkula. At the start and in the middle of a word it looks like Arabic kaf in most fonts; the difference usually shows at the end, where Arabic kaf carries a small inner mark and keheh does not. In some fonts the two are close enough that you cannot tell them apart by eye.

Persian digits vs Arabic-Indic digits

Digits come in two separate sets as well:

  • Arabic-Indic digits ٠١٢٣٤٥٦٧٨٩, U+0660 to U+0669. Unicode notes that these are used with Arabic.
  • Extended (Eastern) Arabic-Indic digits ۰۱۲۳۴۵۶۷۸۹, U+06F0 to U+06F9, used for Arabic-script languages of Iran, Pakistan and India such as Persian, Urdu and Sindhi.

Most digits look the same in both sets. The visible difference is usually in 4, 5 and 6: «٤ ٥ ٦» in Arabic, «۴ ۵ ۶» in Persian. Unicode also notes that Urdu draws some of these digits differently from Persian while using the same code points. So «۲۰۲۶» can look identical to «٢٠٢٦» in a given font, yet the two strings do not match in search or sorting, and some systems may not treat Persian digits as numbers at all.

Where mixed text comes from

  • Persian and Urdu keyboard layouts. Microsoft’s Windows keyboard layout pages show that the Persian, Persian (Standard) and Urdu layouts type Farsi yeh U+06CC and keheh U+06A9 on their base keys, and that Persian (Standard) types ۰–۹ on the number row. Anyone writing Arabic on one of these layouts gets Persian letters without seeing any difference.
  • Text copied from Persian or Urdu sources. Names, terms and titles taken from Persian websites or files keep their original letters.
  • Fonts. Many Arabic fonts draw the Persian letters almost exactly like their Arabic look-alikes, so nothing looks wrong on screen.
  • Data merged from several systems. The same name arrives in two or three spellings, and the same customer appears twice in a list.

How to tell whether your text has Persian letters

Do not trust your eyes. Use one of these instead:

  1. Name every character. Paste the text into Invisible text and tick Show all characters (first 300). You get a list of each character with its position, code point and official name.
  2. Look up one letter. Paste the suspect letter into Search a character, name or U+0627 in Characters to see its name, code point and joining behaviour from the Unicode data.
  3. Search for it directly. Copy «ی» and «ک» from this page and search your file or sheet for them. Any hit inside Arabic text means Persian letters are there.
Example from the tool · Invisible textTwo look-alike words with different yeh characters
Original
علي علی
Result
  • U+0639 · ARABIC LETTER AIN · Position 1
  • U+0644 · ARABIC LETTER LAM · Position 2
  • U+064A · ARABIC LETTER YEH · Position 3
  • U+0020 · SPACE · Position 4
  • U+0639 · ARABIC LETTER AIN · Position 5
  • U+0644 · ARABIC LETTER LAM · Position 6
  • U+06CC · ARABIC LETTER FARSI YEH · Position 7

Settings: Invisible text · Show all characters

Open the tool: Invisible text

The two words look alike, but the third character is ARABIC LETTER YEH in the first and ARABIC LETTER FARSI YEH in the second.

Unicode normalization will not fix this. NFC and NFKC unify equivalent encodings of the same character, and Farsi yeh is not another encoding of Arabic yeh; it is a separate letter with no decomposition. Text goes through Normalization unchanged:

Example from the tool · NormalizationNormalization does not convert Persian letters
Original
علی کتاب
Result
علی کتاب
Code points before
U+0639 U+0644 U+06CC U+0020 U+06A9 U+062A U+0627 U+0628
Code points after
U+0639 U+0644 U+06CC U+0020 U+06A9 U+062A U+0627 U+0628

Settings: Unicode normalization · NFKC

Open the tool: Normalization

Convert ی and ک to ي and ك, step by step

  1. Open the Cleaner and paste your text into Original text.
  2. Open More controls at the bottom of Transform options and find Normalize letters for search.
  3. Tick Persian ی ک → Arabic ي ك. It changes exactly two letters: ی becomes ي and ک becomes ك. It leaves alef maksura «ى» alone, and other Persian letters such as پ چ ژ گ too.
  4. Check the Change summary for the number of Persian letters changed, then Compare changes to see each old letter struck through next to the new one.
  5. Copy or download the result, and keep the original if it has to go back to its source.
Example from the tool · CleanerA name and two words with Persian letters in an Arabic sentence
Original
اشترى علی کتابا من المکتبة.
Result
اشترى علي كتابا من المكتبة.

Settings: Cleaner · More controls · Persian ی ک → Arabic ي ك

Open the tool: Cleaner

Three letters changed: the yeh in «علی» and the kaf in «کتابا» and «المکتبة». «اشترى» kept its alef maksura because it was typed with Arabic ى in the first place.

Watch the yeh at the end of words

A Persian keyboard has one main yeh key, and it types «ی». At the end of a word «ی» looks exactly like «ى», so someone writing Arabic on that layout types «علی» and «إلی» and sees nothing wrong. The Cleaner cannot know what the writer meant, so it turns every ی into ي:

Example from the tool · CleanerAn Arabic sentence typed on a Persian keyboard
Original
سافر إلی دبی وجلس علی الکرسی.
Result
سافر إلي دبي وجلس علي الكرسي.

Settings: Cleaner · Persian ی ک → Arabic ي ك

Open the tool: Cleaner

«دبي» and «الكرسي» come out right, but «إلي» and «علي» are wrong here; the sentence needs «إلى» and «على». After converting, review words that end in ي, especially ones normally written with alef maksura such as على، إلى، حتى، لدى، مصطفى and موسى. Fix them by hand, or use the Cleaner’s Find & replace for a phrase you are sure of.

If all you need is a search key, you do not have to decide. Tick Persian ی ک → Arabic ي ك together with ى → ي and all three spellings become one key:

Example from the tool · CleanerThree spellings become one search key
Original
علی
على
علي
Result
علي
علي
علي

Settings: Normalize letters for search · Persian ی ک → Arabic ي ك · ى → ي

Open the tool: Cleaner

That copy is for indexing and matching, not for publishing. See normalizing Arabic for search for the full approach.

Converting Persian digits

In the Cleaner, open Convert digits and pick the target. It converts every digit in the text, whether Western, Arabic-Indic or Persian, to one set:

Example from the tool · CleanerPersian digits converted to Arabic-Indic
Original
رقم الطلب ۴۵۶۲۷ والمبلغ ۱۲٫۵۰۰ د.ك
Result
رقم الطلب ٤٥٦٢٧ والمبلغ ١٢٫٥٠٠ د.ك

Settings: Cleaner · Convert digits · Arabic-Indic

Open the tool: Cleaner

Choose Western — 0123456789 if your audience writes 123. The Arabic decimal separator «٫» is left as it is either way, so after converting to Western digits, replace it with a full stop yourself:

Example from the tool · CleanerThe same digits as 0–9; the decimal separator stays
Original
رقم الطلب ۴۵۶۲۷ والمبلغ ۱۲٫۵۰۰ د.ك
Result
رقم الطلب 45627 والمبلغ 12٫500 د.ك

Settings: Cleaner · Convert digits · Western

Open the tool: Cleaner

If the text contains links or email addresses with digits in them, tick Protect detected links & emails during digit conversion. World numerals does the same conversion, with Protect links and email on by default:

Example from the tool · World numeralsThe phone number converts; the link is left alone
Original
هاتف: ۰۹۱۲ ۳۴۵ ۶۷۸۹ - https://example.com/p/۱۲
Result
هاتف: ٠٩١٢ ٣٤٥ ٦٧٨٩ - https://example.com/p/۱۲

Settings: World numerals · arab · Protect links and email

Open the tool: World numerals

World numerals also shows the Default system and Native system for each locale from CLDR data. Pick fa and you will see Persian defaults to arabext; pick ur and you will see Urdu defaults to latn, with arabext as its native system. For more on digit shapes, read the Arabic numerals guide.

When not to convert

Farsi yeh and keheh are not errors in themselves. They are the correct letters for Persian, Urdu and several other languages. Convert them only in Arabic text that picked them up by accident.

Example from the tool · CleanerA correct Persian sentence damaged by conversion
Original
این کتاب خیلی خوب است.
Result
اين كتاب خيلي خوب است.

Settings: Cleaner · Persian ی ک → Arabic ي ك

Open the tool: Cleaner

That was a correct Persian sentence; after conversion it is spelled with letters Persian does not use. So do not convert:

  • Persian or Urdu text, including quotations from it inside Arabic text.
  • Persian or Urdu proper names that must keep their original spelling, as in references and official documents.
  • Mixed-language text without review. Convert the Arabic part only and leave the rest as it was.
  • A file that goes back to a Persian or Urdu source. Make a search copy and keep the original.

Urdu also uses letters this option does not touch, such as ے ہ ھ. Converting does not make Urdu text Arabic; it leaves a mix of both spellings.

Frequently asked questions

Why can’t search find «علي» when I can see it in the file?

Most likely the word was typed with Farsi yeh «ی». Paste it into Invisible text with Show all characters to confirm, then convert it in the Cleaner or search for both spellings.

Does the option turn alef maksura «ى» into «ي»?

No. It only changes «ی» and «ک». To treat «ى» and «ي» as the same for search, tick the separate ى → ي option, knowing that it changes the spelling.

Will NFKC normalization fix Persian letters?

No. Normalization unifies equivalent encodings of the same character. Farsi yeh and keheh are separate letters in Unicode, so they survive NFC and NFKC unchanged.

Does it change other Persian letters such as گ, پ or چ?

No. Those letters have no direct counterpart in standard Arabic spelling, so the tool does not guess a replacement. If they appear in Arabic text, review them by hand.

How do I stop this happening in the first place?

Type Arabic on an Arabic keyboard layout and keep the Persian or Urdu layout for those languages. If your data comes from several sources, normalize the search copy on import and keep the original value in its own column.

Tools used in this guide

Clean Arabic textRemove Arabic diacritics and tatweel, convert Arabic or Persian digits, and clean spacing. Compare changes and download your text locally for free.Arabic character explorerSearch letters, marks and punctuation. Inspect joining, direction and code points from Unicode 18.0.Arabic, Persian & worldwide digit converterExplore 30 CLDR locale records and convert digit shapes without rounding or changing their value.

Sources

We checked these pages when writing and updating this guide.

Unicode 18.0 code chart: Arabic (U+0600–U+06FF) ↗Unicode 18.0 names list (chart annotations) ↗The Unicode Standard 18.0, Chapter 9: Arabic ↗Unicode Standard Annex #15: Normalization forms ↗Microsoft Learn: Persian (Standard) keyboard layout ↗Microsoft Learn: Persian keyboard layout ↗Microsoft Learn: Urdu keyboard layout ↗Unicode CLDR JSON 48.2.3: locale numbering systems ↗