Как получить все символы в определенной языковой группе UTF-8?

Я не знаю точной технической терминологии, но UTF-8 в качестве стандарта включает символы из определенных языковых группировок, которые можно наблюдать на символьной карте Windows с помощью шрифта, такого как Arial Unicode MS .

  • латынь
  • кириллица
  • греческий
  • иврит
  • арабский
  • Деванагари
  • Gujrati
  • каннада
  • Лао
  • Хирагана
  • Валютные символы
  • Чертежи коробки

Как получить список символов под каждым набором? Это может быть API или просто простой список / DB где-то в сети. Я нашел статью wiki, которая перечисляет все, но не в итерируемой форме. Есть идеи?

Вы можете получить доступ ко всему списку символов Unicode в опубликованном файле UnicodeData.txt, который представляет собой файл в формате CSV, в котором перечислены все символы с информацией о группе.

Группировка по classам

Третий столбец определяет class символов в двузначной короткой форме, заданной здесь длинными формами .

  • letter-character – classы Lu, Ll, Lt, Lm, Lo или Nl
  • combining-character – classы Mn или Mc
  • decimal-digit-character – class Nd
  • connecting-character – class Pc
  • formatting-character – class Cf

Его даже возможно выполнить итерацию через символы определенной группы с использованием C # LINQ:

 var charInfo = Enumerable.Range(0, 0x110000) .Where(x => x < 0x00d800 || x > 0x00dfff) .Select(char.ConvertFromUtf32) .GroupBy(s => char.GetUnicodeCategory(s, 0)) .ToDictionary(g => g.Key); foreach (var ch in charInfo[UnicodeCategory.LowercaseLetter]) { Console.Write(ch); } 

Группирование по языку

Однако языковая группировка явно не упоминается, поэтому вам придется проанализировать первое слово имени для группировки каждого символа по языку. Это самый надежный способ сделать это, так как каждый латинский символ юникода начинается с префикса «Latin» . Примеры:

  • Латинская: Латинская столица Письмо A
  • Латинская расширенная A: латинская малая буква C с острым
  • Латинская расширенная B: Латинская столица Letter Tone Six
  • Латинская расширенная дополнительная: латинская столица Letter B с точкой выше