在 Unicode 中,U+0651 ARABIC SHADDA 应该在 KASRA...之前还是之后?

In Unicode, should U+0651 ARABIC SHADDA be before or after KASRA...?

把这个词用阿拉伯语翻译成:مرَّ⑩

这可以用这个 Unicode 字符序列来写:

/*
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")

它们的渲染方式相同。他们都被认为是正确的吗?一个被认为比另一个更可取吗?

我不确定一个是否正确。然而,对我来说有趣的是,规范化 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_first
'مرَّة'
>>> shadda_second
'مرَّة'
>>> 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

(请注意,Stack Overflow 很难在等宽输出中看到 KASRA 变音符号。将答案复制并粘贴到您最喜欢的文本编辑器中,以查看 مروّ⑩ 中的变音符号。)