Есть ли способ проверить, является ли текст 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);
}
Ответ 4
Просто проверьте символы, чтобы увидеть, находятся ли кодовые точки в требуемом диапазоне (диапазонах). Для примера см. Этот вопрос:
Каков полный диапазон для китайских символов в Юникоде?
Ответ 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
Вам нужно запросить базу данных символов Юникода, которая содержит информацию о каждом символе юникода. Вероятно, в С# есть функция утилиты, которая может сделать это для вас. В противном случае вы можете загрузить его из Интернета.