2015-05-27 15 views

risposta

19

Emoji è un simbolo Unicode. Sulla base della tabella dei caratteri Unicode, i contrassegni Emoji sono composti da 26 caratteri Unicode alfabetici (A-Z) destinati alla codifica dei codici paese ISO 3166-1 alpha-2 a due lettere (wiki).

Questo significa che è possibile dividere due lettere codice del paese e convertire ogni lettera A-Z alla lettera indicatore simbolo regionale:

private String localeToEmoji(Locale locale) { 
    String countryCode = locale.getCountry(); 
    int firstLetter = Character.codePointAt(countryCode, 0) - 0x41 + 0x1F1E6; 
    int secondLetter = Character.codePointAt(countryCode, 1) - 0x41 + 0x1F1E6; 
    return new String(Character.toChars(firstLetter)) + new String(Character.toChars(secondLetter)); 
} 

Dove 0x41 rappresenta maiuscolo A lettera e 0x1F1E6 è REGIONAL INDICATOR SYMBOL LETTER A nella tabella Unicode.

Nota: Questo esempio di codice è semplificato e non ha richiesto controlli relativi al codice paese, che potrebbero non essere disponibili all'interno della locale.

+1

incredibile soluzione più semplice uomo –

+0

posso ottenere tutte le bandiere coutnries? –

+0

Il metodo java.util.Locale.getISOCountries() restituisce un elenco di tutti i codici paese di 2 lettere definiti in ISO 3166. È possibile utilizzare queste stringhe per generare emoji. – Dmitry

0

Quando ho scritto questa risposta per la prima volta in qualche modo ho trascurato che ho lavorato solo su Android tramite React Native!

In ogni caso, ecco la mia soluzione JavaScript che funziona con o senza il supporto ES6.

function countryCodeToFlagEmoji(country) { 
 
     return typeof String.fromCodePoint === "function" 
 
     ? String.fromCodePoint(...[...country].map(c => c.charCodeAt() + 0x1f185)) 
 
     : [...country] 
 
      .map(c => "\ud83c" + String.fromCharCode(0xdd85 + c.charCodeAt())) 
 
      .join(""); 
 
    } 
 

 
console.log(countryCodeToFlagEmoji("au")); 
 
console.log(countryCodeToFlagEmoji("aubdusca"));

Se si desidera passare nei codici dei paesi come lettere maiuscole, invece, basta cambiare i due offset per 0x1f1a5 e 0xdda5.

Problemi correlati