Как сравнить и конвертировать символы emoji в C#
Я пытаюсь выяснить,как проверить, содержит ли строка specfic emoji. Например, посмотрите на следующие два emoji:
велосипедист:http://unicode.org/emoji/charts/full-emoji-list.html#1f6b4
флаг США:http://unicode.org/emoji/charts/full-emoji-list.html#1f1fa_1f1f8
велосипедиста составляет U+1F6B4, а флаг США -U+1F1FA U+1F1F8.
тем не менее, emoji для проверки предоставляются мне в массиве вот так, только с числовым значением в строках:
var checkFor = new string[] {"1F6B4","1F1FA-1F1F8"};
как я могу преобразовать эти значения массива в фактические символы unicode и проверить, содержит ли их строка?
Я могу получить что-то работающее для велосипедиста, но для флага США я в тупике.
для велосипедиста, я делаю следующее:
const string comparisonStr = "..."; //some string containing text and emoji
var hexVal = Convert.ToInt32(checkFor[0], 16);
var strVal = Char.ConvertFromUtf32(hexVal);
//now I can successfully do the following check
var exists = comparisonStr.Contains(strVal);
но это не будет работать с флагом США из-за нескольких кодовых точек.
1 ответов
вы уже прошли трудную часть. Все, что вам не хватало, - это синтаксический анализ значения в массиве и объединение 2 символов Юникода перед выполнением проверки.
вот пример программы, которая должна работать:
static void Main(string[] args)
{
    const string comparisonStr = "bicyclist: \U0001F6B4, and US flag: \U0001F1FA\U0001F1F8"; //some string containing text and emoji
    var checkFor = new string[] { "1F6B4", "1F1FA-1F1F8" };
    foreach (var searchStringInHex in checkFor)
    {
        string searchString = string.Join(string.Empty, searchStringInHex.Split('-')
                                                        .Select(hex => char.ConvertFromUtf32(Convert.ToInt32(hex, 16))));
        if (comparisonStr.Contains(searchString))
        {
            Console.WriteLine($"Found {searchStringInHex}!");
        }
    }
}
