Как проверить, есть ли у символа Unicode диакритические знаки в .Net? - PullRequest
5 голосов
/ 19 февраля 2012

Я занимаюсь разработкой эвристики для автоматического определения языка и хотел бы выяснить, есть ли в данном письме диакритические знаки (например, "Ðàäèî Êóëüòóðà" - все буквы имеют диакритические знаки).Было бы лучше, если бы я мог также получить тип диакритического знака, если это возможно.

Я просмотрел UnicodeCategory enum, но не нашел ничего, что могло бы помочь мне здесь.

1 Ответ

13 голосов
/ 19 февраля 2012

Один из возможных способов - привести его к форме, в которой буквы и их диакритические знаки записаны в виде нескольких кодовых точек. Затем проверьте, есть ли у вас письмо, за которым следуют акценты.

Адаптация от Как удалить диакритические знаки (акценты) из строки в .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);
}
...