В Unicode должен ли U + 0651 ARABIC SHADDA быть до или после KASRA ...? - PullRequest
1 голос
/ 25 октября 2019

Возьмите это слово по-арабски: مرَّة

Это можно записать с помощью этой последовательности символов Юникода:

/*
U+0645 # ARABIC LETTER MEEM
U+0631 # ARABIC LETTER REH
U+0651 # ARABIC SHADDA
U+064e # ARABIC FATHA
U+0629 # ARABIC LETTER TEH MARBUTA
*/
console.log("\u0645\u0631\u0651\u064e\u0629")

или как эта последовательность (те же буквы, но поменялись местами FATHA и SHADDA):

/*
U+0645 # ARABIC LETTER MEEM
U+0631 # ARABIC LETTER REH
U+064e # ARABIC FATHA
U+0651 # ARABIC SHADDA
U+0629 # ARABIC LETTER TEH MARBUTA
*/
console.log("\u0645\u0631\u064e\u0651\u0629")

Они оба отображаются одинаково. Они оба считаются правильными? Один считается предпочтительным другому?

1 Ответ

1 голос
/ 25 октября 2019

Я не уверен, что один считается правильным. Тем не менее, мне интересно, что нормализация Unicode всегда приводит к тому, что shadda ставится на второе место для форм нормализации NFC, NFKC, NFD, NFKD.

Посмотрите на этот код Python:

>>> shadda_first = "\u0645\u0631\u0651\u064e\u0629"
>>> shadda_second = "\u0645\u0631\u064e\u0651\u0629"
>>> shadda_second == shadda_first
False
>>> shadda_second
'مرَّة'
>>> shadda_first
'مرَّة'
>>> import unicodedata
>>> unicodedata.normalize("NFC", shadda_second)
'مرَّة'
>>> unicodedata.normalize("NFC", shadda_second) == shadda_second
True
>>> unicodedata.normalize("NFC", shadda_first) == shadda_second
True
>>> unicodedata.normalize("NFKC", shadda_second) == shadda_second
True
>>> unicodedata.normalize("NFKC", shadda_first) == shadda_second
True
>>> unicodedata.normalize("NFD", shadda_second) == shadda_second
True
>>> unicodedata.normalize("NFD", shadda_first) == shadda_second
True
>>> unicodedata.normalize("NFKD", shadda_second) == shadda_second
True
>>> unicodedata.normalize("NFKD", shadda_first) == shadda_second
True
...