有没有办法检查unicode文本是否使用某种语言?

时间:2011-05-22 13:31:38

标签: c# unicode .net-4.0

我将从用户那里获取需要验证的文字是中文字符。

有什么办法可以检查吗?

9 个答案:

答案 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#中可能有一个实用程序函数可以为您执行此操作。否则你可以从互联网上下载。