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

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)

  • 如果您需要进行真/假检查,您可以将其标准化为FormD或其他任何内容,并检查字符串是否长于原始字符串. (3认同)
  • @JoakimJohansson您的算法认为具有变音符号的一大类字符是韩语hangul字符.它们由几个部分组成,它们被分解,但没有变音符号.一些例子:`가`,`간`,`갂`.然后有数学符号,如:`≠`,`⊉`,`∄`,`∦`最后一些我根本不知道:`ஔ` (2认同)