difference between U+06A4 and U+06A8? (ARABIC LETTER VEH and ARABIC LETTER QAF WITH THREE DOTS ABOVE)

Viewed 18

I'm interested in these two Unicode characters:

  • U+06A4 ARABIC LETTER VEH ڤ
  • U+06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE ڨ

They seem to render the same when placed in the middle of a word:

  • بڤر
  • بڨر

From a developer's point of view, how do I distinguish between them? Should I normalize one to another?

1 Answers

These characters are not used much in Arabic. (I don't know if there are used in other languages that use the Arabic script).

I don't know the official answer on this, but this what I can gather. This Wikipedia page is very helpful: Ve (Arabic letter)

  • The first character U+06A4 ARABIC LETTER VEH ڤ is meant to be the letter representing the "v" sound in Arabic, used when transliterating words from foreign languages (since "v" is not part of the usual Arabic alphabet). Not all Arabs in Arab countries use this letter this way. It looks identical to the second character U+06A8, except when it comes to the final form and the isolated form. Think of it as ف but with three dots instead of one.
  • The second character U+06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE ڨ is meant to be the letter representing the "g" sound in some Arabic dialects, also used when transliterating words from foreign languages (since "g" is not part of the modern standard Arabic alphabet). Think of it as ق but with three dots instead of one.

This table illustrates the differences in the isolated and final forms (I am using U+0640 ARABIC TATWEEL ـ to form the initial, medial and final forms):

Position in word Isolated Final Medial Initial
U+0A64 Veh eg: ڤ eg: ـڤ eg: ـڤـ eg: ڤـ
U+0A68 Qaf with three dots above eg: ڨ eg: ـڨ eg: ـڨـ eg: ڨـ

Both of these characters don't change when normalised, as demonstrated by this Python script:

>>> veh = "\u06A4"
>>> qaf3 = "\u06A8"
>>> from unicodedata import normalize
>>> for form in ["NFC", "NFKC", "NFD", "NFKD"]:
...     print(normalize(form, veh) == veh)
...     print(normalize(form, qaf3) == qaf3)
...
True
True
# etc
Related