Есть ли способ проверить, является ли текст Unicode на определенном языке?

Я получаю текст от пользователя, который мне нужен для проверки, - это китайский символ.

Можно ли это проверить?

Ответы

Ответ 1

В соответствии с предоставленной информацией здесь, на веб-сайте Юникода вы можете найти блок китайского языка или любой другой язык, а затем реализовать парсер, чтобы проверить, слово находится в диапазоне или нет. точно так же, как

public bool IsChinese(string text)
{
    return text.Any(c => c >= 0x20000 && c <= 0xFA2D);
}

Обратите внимание, что

В качестве удобной ссылки Консорциум Unicode здесь предоставляет интерфейс поиска для Unicode Hàn (漢) База данных (Unihan).

Ссылка на базу данных, представленную выше, показывает вам символы

Ответ 2

Вы можете использовать регулярное выражение для соответствия Поддерживаемые именованные блоки:

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();

Ответ 3

Как упоминалось здесь несколько человек, в юникоде, китайский, японский и корейский символы кодируются вместе, и есть несколько диапазонов. https://en.wikipedia.org/wiki/CJK_Compatibility

Для простоты здесь приведен пример кода, который определяет весь диапазон CJK:

public bool IsChinese(string text)
{
    return text.Any(c => (uint)c >= 0x4E00 && (uint)c <= 0x2FA1F);
}

Ответ 5

В соответствии с википедией (https://en.wikipedia.org/wiki/CJK_Compatibility) существует несколько диапазонов кода символов. Вот мой подход к обнаружению китайских иероглифов по ссылке выше (код в 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) 
                )

Ответ 6

в кодировке unicode, chinese, japan и Korean кодируются вместе.

посетите этот FAQ: http://www.unicode.org/faq/han_cjk.html

китайский символ распределяется в серверных блоках.

Посетите эту вики: https://en.wikipedia.org/wiki/CJK_Unified_Ideographs

В юникодном веб-сайте вы найдете серверные диаграммы символов cjk.

Для простоты вы можете просто использовать минимальный и максимальный диапазон китайского символа:

0x4e00 и 0x2fa1f для проверки.

Ответ 7

Это сработало для меня:

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;
}

Ответ 8

Вам нужно запросить базу данных символов Юникода, которая содержит информацию о каждом символе юникода. Вероятно, в С# есть функция утилиты, которая может сделать это для вас. В противном случае вы можете загрузить его из Интернета.