我正在开发一种用于自动语言检测的启发式算法,并想知道给定的字母是否具有变音符号(例如“ÐàäèîÊóëüòóðà” - 所有字母都有变音符号)。如果可能的话,我最好能得到变音符号的类型。
我浏览了UnicodeCategory
枚举,但没有找到任何可以帮助我的东西。
答案 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);
}