Ale*_*kin 6 c# unicode diacritics
我正在开发一种用于自动语言检测的启发式算法,并想知道给定的字母是否具有变音符号(例如"ÐàäèîÊóëüòóðà" - 所有字母都有变音符号).如果可能的话,我最好能得到变音符号的类型.
我浏览了UnicodeCategoryenum,但没有找到任何可以帮助我的东西.
Cod*_*aos 15
一种可能的方法是将其标准化为一种形式,其中字母及其变音符号被写为多个代码点.然后检查你是否有一个字母后跟重音符号.
适应如何从.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);
}
Run Code Online (Sandbox Code Playgroud)