首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#如何检查用户在文本框中输入的字符串是否为中文?

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

Stack Overflow用户
提问于 2011-04-14 01:41:26
回答 4查看 2.2K关注 0票数 1

如何检查用户在文本框中输入的字符串是否为中文?有人能给我指路吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-14 01:51:46

您可以很容易地检查所使用的代码点是否为汉字。这些区域在Unicode character database中定义。

代码语言:javascript
复制
// 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统一了用于中文、日文和韩文的表意文字,因此需要某种语言分析来区分它们。

如果您告诉我们为什么要这样做,可以提供更多的帮助。也许其他方法会更好。

票数 2
EN

Stack Overflow用户

发布于 2011-04-14 01:43:07

也许你需要使用一种简单的统计方法。统计编码在中文UTF-8符号范围内的字符数,不在UTF-8符号范围内的字符数。根据一个组是否大于另一个组来做出决定。

请注意,这将不适用于那些会输入罗马化中文的人。在这种情况下,您可能应该应用字典计数方法来查看有多少个英语单词匹配。如果大多数单词都不匹配,你可以认为它不是英语。

票数 2
EN

Stack Overflow用户

发布于 2011-04-14 01:48:43

如果输入包含4E00-9FFF范围内的unicode字符,则它包含中文字符,因此语言可能是中文、日文或韩文。

为了猜测它是否是中文,您可能想要检查输入中是否出现了中文中最常用的一些字符(例如,请参见http://www.zein.se/patrick/3000char.html )。或者,检查输入中是否出现平假名(3040-309F)、片假名(30A0-30FF)或挂起(1100-11FF)字符;它们只出现在日语和韩语中;如果它们出现在输入中,则即使文本包含中文字符,也不存在中文文本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5653296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档