有没有办法检查unicode文本是否使用某种语言?

Dis*_*ive 20 c# unicode .net-4.0

我将从用户那里获取需要验证的文本是中文字符.

有什么方法可以检查吗?

Nas*_*loo 18

根据unicode网站上提供的信息,您可以找到中文或任何其他语言的块,然后实现解析器以检查单词是否在范围内或不是.就像

public bool IsChinese(string text)
{
    return text.Any(c => c >= 0x20000 && c <= 0xFA2D);
}
Run Code Online (Sandbox Code Playgroud)

注意

作为一个方便的参考,Unicode Consortium 在这里提供了UnicodeHàn(汉)数据库(Unihan)的搜索界面.

我上面提供的数据库链接显示了字符

  • 0x20000大于0xfa2d.条件如何c> = 0x20000 && c <= 0xFA2D? (8认同)

Tyl*_*ong 9

您可以使用正则表达式与支持的命名块匹配:

private static readonly Regex cjkCharRegex = new Regex(@"\p{IsCJKUnifiedIdeographs}");
public static bool IsChinese(this char c)
{
    return cjkCharRegex.IsMatch(c.ToString());
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用:

if (sometext.Any(z=>z.IsChinese()))
     DoSomething();
Run Code Online (Sandbox Code Playgroud)


Mil*_*ana 8

正如这里提到的几个人一样,在unicode中,中文,日文和韩文字符被编码在一起,并且有几个范围. https://en.wikipedia.org/wiki/CJK_Compatibility

为简单起见,这是一个检测所有CJK范围的代码示例:

public bool IsChinese(string text)
{
    return text.Any(c => (uint)c >= 0x4E00 && (uint)c <= 0x2FA1F);
}
Run Code Online (Sandbox Code Playgroud)