我将从用户那里获取需要验证的文字是中文字符。
有什么办法可以检查吗?
答案 0 :(得分:18)
根据提供的信息here in unicode website,您可以找到中文或任何其他语言的块,然后实现解析器以检查单词是否在范围内或不是。就像
public bool IsChinese(string text)
{
return text.Any(c => c >= 0x20000 && c <= 0xFA2D);
}
请注意
作为一个方便的参考,Unicode Consortium here提供了UnicodeHàn(汉)Database (Unihan)的搜索界面。
我上面提供的数据库链接显示了字符
答案 1 :(得分:8)
您可以使用正则表达式与Supported Named Blocks匹配:
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();
答案 2 :(得分:7)
正如这里提到的几个人一样,在unicode中,中文,日文和韩文字符被编码在一起,并且有几个范围。 http://findmyfbid.com
为简单起见,这里是一个检测所有CJK范围的代码示例:
public bool IsChinese(string text)
{
return text.Any(c => (uint)c >= 0x4E00 && (uint)c <= 0x2FA1F);
}
答案 3 :(得分:3)
只需检查字符以查看代码点是否在所需范围内。例如,请看这个问题:
What's the complete range for Chinese characters in Unicode?
答案 4 :(得分:1)
根据维基百科(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)
)
答案 5 :(得分:0)
以unicode,中文,日文和韩文字符编码在一起。
访问此常见问题解答:http://www.unicode.org/faq/han_cjk.html
中文字符分布在几个块中。
访问此维基:https://en.wikipedia.org/wiki/CJK_Unified_Ideographs
你会发现在unicode网站上有几个cjk字符图表。
为简单起见,您可以使用中文字符最小和最大范围:
0x4e00和0x2fa1f来检查。
答案 6 :(得分:0)
这对我有用:
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;
}
答案 7 :(得分:0)
如果有人正在寻找,我发现使用UnicodeRanges
(更确切地说是UnicodeRanges.CjkUnifiedIdeographs
)的另一种方式:
public bool IsChinese(char character)
{
var minValue = UnicodeRanges.CjkUnifiedIdeographs.FirstCodePoint;
var maxValue = minValue + UnicodeRanges.CjkUnifiedIdeographs.Length;
return (character >= minValue && character < maxValue);
}
答案 8 :(得分:-1)
您需要查询Unicode字符数据库,其中包含每个unicode字符的信息。 C#中可能有一个实用程序函数可以为您执行此操作。否则你可以从互联网上下载。