c#如何检查用户在文本框中输入的字符串是否为中文?

| 如何检查用户在文本框中输入的字符串为中文? 有人可以引导我吗?     
已邀请:
您可以轻松地检查所使用的代码点是否为汉字表意文字。这些区域在Unicode字符数据库中定义。
// Warning, this code only works for common Han ideographs inside the BMP. (Surrogate code points will need special care, and additional ranges within the BMP contain rare, historic, and uncommon characters.)
const double hannessThreshold = 0.25d;
const char lowestHanCodepoint = \'\\u4E00\';
const char highestHanCodepoint = \'\\u9FFF\';
string text = myTextBox.Text;
int hanCharacterCount = 0;
foreach (char c in text)
    if (lowestHanCodepoint <= c && c <= highestHanCodepoint)
        hanCharacterCount++;
double hannessScore = (double)hanCharacterCount / text.Length;
if (hannessScore >= hannessThreshold)
    MessageBox.Show(\"You are typing in Chinese, Japanese, or Korean!\");
但是,这还不足以确定它是否完全是中文。 Unicode统一了用于中文,日文和韩文的表意文字,因此有必要进行某种语言分析以区分它们。 如果您告诉我们为什么要这样做,则可以提供更多帮助。也许其他一些方法会更好。     
可能您需要使用一种简单的统计方法。计算代码在汉字UTF-8符号范围内的字符数,以及不在此范围内的字符数。根据一个组是否大于另一组来做出决定。 请注意,这不适用于输入罗马化中文的用户。对于这种情况,您可能应该应用字典计数方法来查看有多少个英语单词匹配。如果大多数单词不匹配,则可以假定它不是英语。     
如果输入包含4E00-9FFF范围内的unicode字符,则它包含中文字符,因此语言可能是中文,日语或韩语。 为了猜测它是否为中文,您可能需要检查输入中是否出现了一些最常用的中文字符(请参见例如http://www.zein.se/patrick/3000char.html)。或者,检查输入中是否出现了平假名(3040–309F),片假名(30A0–30FF)或韩文(1100–11FF)字符;它们仅以日语和韩语出现;如果它们出现在输入中,即使该文本包含汉字,您也没有中文文本。     
我的猜测是检查所使用的字符集,如果输入的是中文字符,我想那应该是中文。但是,我想检查一下是一件非常朦胧的事情。如果中文单词是用西方字母写的怎么办?不知道您还会如何检查类似的内容。     

要回复问题请先登录注册