2015-10-01 62 views
6

Sto cercando di capire come verificare se una stringa contiene un'emoji specfica. Ad esempio, cerca nella due emoji seguente:Come confrontare e convertire i caratteri emoji in C#

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

bandiera degli Stati Uniti: http://unicode.org/emoji/charts/full-emoji-list.html#1f1fa_1f1f8

Ciclista è U+1F6B4, e la bandiera degli Stati Uniti è U+1F1FA U+1F1F8.

Tuttavia, l'emoji per controllare sono forniti a me in una serie come questa, con il solo valore numerico nelle stringhe:

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

Come posso convertire quei valori di matrice in caratteri unicode effettivi e controllare vedi se una stringa li contiene?

Posso ottenere qualcosa di lavoro per il ciclista, ma per la bandiera americana sono perplesso.

Per il ciclista, sto facendo la seguente:

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

Ma questo non funzionerà con la bandiera degli Stati Uniti a causa dei punti di codice multiple.

risposta

9

Hai già superato la parte difficile. Tutto quello che mancava era analizzare il valore nell'array e combinare i 2 caratteri unicode prima di eseguire il controllo.

Ecco un esempio di programma che dovrebbe funzionare:

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

Perfetto, grazie. I personaggi che combinavano mi stavano facendo incazzare per qualche motivo. – tbraun