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

问题描述:

如何检查用户在文本框中输入的字符串是否是中文? 任何人都可以引导我?c#如何检查用户在文本框中输入的字符串是否是中文?

您可以轻松查看所使用的代码点是否为汉字。这些区域在Unicode character database中定义。

// 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统一了中文,日文和韩文的表意文字,因此需要进行某种语言分析来区分它们。

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

+0

感谢您的帮助! – joonshen 2011-04-13 18:20:00

+0

原因我在做中文OCR。让使用者可以训练系统学习新的汉字。所以我需要限制用户输入其他语言,但只限于中文。 – joonshen 2011-04-14 12:49:17

可能您需要使用一种简单的统计方法。统计代码在中文UTF-8符号范围内的字符数,以及不是的字符数。根据你的决定,一个组是否比另一个组大。

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

我的猜测是检查正在使用的字符集,如果他们是中文字符输入,我想这会是中文。然而,我认为这是一件很朦胧的事情。如果中文文字是用西文字母书写的呢?不知道你还有什么要检查的。

+0

通用字符集既支持英文又支持中文? – Reinderien 2011-04-13 17:45:17

+0

@Reinderien:正如我所说的,要检查是否有特定语言的东西,需要考虑许多变量,这是相当困难和朦胧的。 – 2011-04-13 17:47:00

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

为了猜测它是否为中文,您可能需要检查输入中是否出现中文语言中最常见的字符(请参阅http://www.zein.se/patrick/3000char.html)。或者,检查输入中是否出现了平假名(3040-309F),片假名(30A0-30FF)或汉字(1100-11FF)字符;他们只发生在日本和韩国;如果它们出现在输入中,即使文本包含中文字符,您也可以使用而不是有中文文本。

+0

什么字符集是“4E00-9FFF”? UTF-16? – Reinderien 2011-04-13 17:57:31

+0

@fmunkert:所以如果我需要编写代码我将如何写? – joonshen 2011-04-13 17:59:20

+0

4E00-9FFF是Unicode代码点,它们独立于UTF- *编码。顺便说一下,如果查看二进制UTF-16字符串,在UTF-16中,实际上会看到来自4E00-9FFF的值。 – 2011-04-13 18:00:16