2011-04-13 51 views

回答

2

您可以輕鬆查看所使用的代碼點是否爲漢字。這些區域在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

2

可能您需要使用一種簡單的統計方法。統計代碼在中文UTF-8符號範圍內的字符數,以及不是的字符數。根據你的決定,一個組是否比另一個組大。

請注意,這不適用於輸入羅馬字中文的人。對於這種情況,您應該應用字典計數方法來查看有多少英文單詞匹配。如果大多數單詞不匹配,您可以認爲它不是英語。

0

我的猜測是檢查正在使用的字符集,如果他們是中文字符輸入,我想這會是中文。然而,我認爲這是一件很朦朧的事情。如果中文文字是用西文字母書寫的呢?不知道你還有什麼要檢查的。

+0

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

+0

@Reinderien:正如我所說的,要檢查是否有特定語言的東西,需要考慮許多變量,這是相當困難和朦朧的。 – 2011-04-13 17:47:00

2

如果輸入包含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

相關問題