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

我将从需要validation的用户获取文本是一个中文字符。

有什么方法可以检查吗?

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

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

注意

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

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

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

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

然后,您可以使用:

 if (sometext.Any(z=>z.IsChinese())) DoSomething(); 

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

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

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

只需检查字符以查看代码点是否在所需范围内。 例如,请看这个问题:

Unicode中的汉字完整范围是什么?

根据维基百科( https://en.wikipedia.org/wiki/CJK_Compatibility ),有几个字符代码diapasons。 这是我根据上面的链接检测中文字符的方法(F#中的代码,但可以很容易地转换)

  let isChinese(text: string) = text |> Seq.exists (fun c -> let code = int c (code >= 0x4E00 && code <= 0x9FFF) || (code >= 0x3400 && code <= 0x4DBF) || (code >= 0x3400 && code <= 0x4DBF) || (code >= 0x20000 && code <= 0x2CEAF) || (code >= 0x2E80 && code <= 0x31EF) || (code >= 0xF900 && code <= 0xFAFF) || (code >= 0xFE30 && code <= 0xFE4F) || (code >= 0xF2800 && code <= 0x2FA1F) ) 

在unicode中,中文,日文和韩文字符一起编码。

请访问此常见问题解答: http : //www.unicode.org/faq/han_cjk.html

汉字分布在几个街区。

访问此维基: https : //en.wikipedia.org/wiki/CJK_Unified_Ideographs

你会发现在unicode网站上有几个cjk字符图表。

为简单起见,您可以使用中文字符最小和最大范围:

要检查0x4e00和0x2fa1f。

这对我有用:

 var charArray = text.ToCharArray(); var isChineseTextPresent = false; foreach (var character in charArray) { var cat = char.GetUnicodeCategory(character); if (cat != UnicodeCategory.OtherLetter) { continue; } isChineseTextPresent = true; break; } 

您需要查询Unicode字符数据库,其中包含每个unicode字符的信息。 在C#中可能有一个实用function可以为你做这个。 否则你可以从互联网上下载。