如何在c#中比较和转换表情符号字符

本文关键字:转换 符号 字符 比较 | 更新日期: 2023-09-27 18:15:28

我想弄清楚如何检查字符串是否包含特定的表情符号。例如,看看下面两个表情符号:

骑自行车:http://unicode.org/emoji/charts/full-emoji-list.html # 1 f6b4

美国国旗:http://unicode.org/emoji/charts/full-emoji-list.html#1f1fa_1f1f8

自行车手是U+1F6B4,美国国旗是U+1F1FA U+1F1F8

然而,要检查的表情符号以这样的数组提供给我,只有字符串中的数值:

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

但是这对美国国旗不起作用,因为有多个代码点

如何在c#中比较和转换表情符号字符

你已经度过了最难的部分。您所缺少的只是解析数组中的值,并在执行检查之前组合两个unicode字符。

下面是一个应该工作的示例程序:

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}!");
        }
    }
}