Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中比较和转换表情符号#_C#_Unicode_String Matching_Emoji_Double Byte - Fatal编程技术网

C# 如何在C语言中比较和转换表情符号#

C# 如何在C语言中比较和转换表情符号#,c#,unicode,string-matching,emoji,double-byte,C#,Unicode,String Matching,Emoji,Double Byte,我试图找出如何检查字符串是否包含特定的表情符号。例如,请看以下两个表情符号: 骑自行车的: 美国国旗: 骑自行车的人是U+1F6B4,美国国旗是U+1F1FA U+1F1F8 但是,要检查的表情符号是以如下数组形式提供给我的,只有字符串中的数值: var checkFor = new string[] {"1F6B4","1F1FA-1F1F8"}; 如何将这些数组值转换为实际的unicode字符并检查字符串是否包含它们 我可以为骑自行车的人做点什么,但是为了美国国旗,我被难倒了 对于骑自行车

我试图找出如何检查字符串是否包含特定的表情符号。例如,请看以下两个表情符号:

骑自行车的:

美国国旗:

骑自行车的人是
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);

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

您已经克服了困难。您所缺少的只是解析数组中的值,并在执行检查之前组合2个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}!");
        }
    }
}

太好了,谢谢。由于某种原因,这些组合角色把我绊倒了。