Bol*_*olo 5

我不知道 C#,但这更像是一个 UNICODE 问题。我会通过UNICODE 规范化,使用这个函数来做到这一点

首先,归一化为分解形式。接下来,从“Mark, Nonspacing”类别[Mn] 中过滤掉所有字符。最后,归一化回组合形式。

如果我没看错,您的字形在 UNICODE 中由ARABIC LETTER ALEF WITH HAMZA ABOVE( U+0623 , [Lo] ) 后跟ARABIC FATHATAN( U+064B , [Mn] ) 表示。第一个字符分解为ARABIC LETTER ALEF( U+0627 , [Lo] ) + ARABIC HAMZA ABOVE( U+0654 , [Mn] )。

这是转换链(第一个箭头表示分解,第二个箭头表示过滤掉非空格标记,第三个箭头表示组合):

U+0623 + U+064B ? U+0627 + U+0654 + U+064B ? U+0627 ? U+0627
Run Code Online (Sandbox Code Playgroud)

分解后,从[Mn]类别中删除所有字符,然后重新组合,只剩下您了ARABIC LETTER ALEF


Bah*_*nji 1

感谢 Bolo 经过几分钟的搜索后的启发,我这样做了:

string s = "";
        foreach (Char c in x)
        {
            if (((int)c).ToString("x").ToLower() != "64b")
                s += c.ToString();

        }
Run Code Online (Sandbox Code Playgroud)

其中 x 是我的字符串

就像这样,我从字符串中排除了阿拉伯法塔坦