2015-10-01 8 views
6

Ich versuche herauszufinden, wie überprüft werden kann, ob eine Zeichenfolge ein spezifisches Emoji enthält. Zum Beispiel sehen Sie die folgenden zwei emoji:Vergleichen und Konvertieren von Emoji-Zeichen in C#

Bicyclist: http://unicode.org/emoji/charts/full-emoji-list.html#1f6b4

US-Flagge: http://unicode.org/emoji/charts/full-emoji-list.html#1f1fa_1f1f8

Bicyclist ist U+1F6B4, und die US-Flagge ist U+1F1FA U+1F1F8.

jedoch die Emojis zu überprüfen, für die in einem Array mir so vorgesehen sind, nur mit dem Zahlenwert in Strings:

var checkFor = new string[] {"1F6B4","1F1FA-1F1F8"}; 

Wie kann ich die Array-Werte in tatsächliche Unicode-Zeichen umwandeln und überprüfen sehen, ob eine Zeichenfolge sie enthält?

Ich kann etwas für den Radfahrer arbeiten, aber für die US-Flagge bin ich ratlos.

Für die Radfahrer, mache ich folgendes:

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

Aber dies wird mit der US-Flagge nicht funktionieren, weil der mehrere Codepunkte.

Antwort

9

Sie haben bereits den schwierigen Teil hinter sich. Sie haben lediglich den Wert im Array analysiert und die 2 Unicode-Zeichen vor der Überprüfung kombiniert.

Hier ist ein Beispielprogramm, das funktionieren sollte:

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

Perfect, danke. Die Kombination von Charakteren brachte mich aus irgendeinem Grund zum Stolpern. – tbraun