如何检查Unicode字符在.Net中是否具有变音符号?

时间:2012-02-19 13:33:15

标签: c# unicode diacritics

我正在开发一种用于自动语言检测的启发式算法,并想知道给定的字母是否具有变音符号(例如“ÐàäèîÊóëüòóðà” - 所有字母都有变音符号)。如果可能的话,我最好能得到变音符号的类型。

我浏览了UnicodeCategory枚举,但没有找到任何可以帮助我的东西。

1 个答案:

答案 0 :(得分:13)

一种可能的方法是将其标准化为一种形式,其中字母和变音符号被写为多个代码点。然后检查你是否有一个字母后跟重音符。

How do I remove diacritics (accents) from a string in .NET?进行调整,您可以使用Normalize(NormalizationForm.FormD)进行标准化,并使用UnicodeCategory.NonSpacingMark检查变音符号。

bool IsLetterWithDiacritics(char c)
{
    var s = c.ToString().Normalize(NormalizationForm.FormD);
    return (s.Length > 1)  &&
           char.IsLetter(s[0]) &&
           s.Skip(1).All(c2 => CharUnicodeInfo.GetUnicodeCategory(c2) == UnicodeCategory.NonSpacingMark);
}