web-dev-qa-db-fra.com

Créer une chaîne avec les pays du pavillon emoji unicode

j'ai besoin de créer une chaîne avec un drapeau de pays unicode emoji..J'ai fait ceci:

StringBuffer sb = new StringBuffer();
sb.append(StringEscapeUtils.unescapeJava("\\u1F1EB"));    
sb.append(StringEscapeUtils.unescapeJava("\\u1F1F7"));

J'attends un drapeau de pays mais je n'ai pas ..Comment puis-je obtenir un drapeau de pays unicode emoji dans String avec les caractères unicodes?

11
colymore

Vous devriez pouvoir faire cela simplement en utilisant toChars à partir de Java.lang.Character.

Cela fonctionne pour moi:

    StringBuffer sb = new StringBuffer();
    sb.append(Character.toChars(127467));
    sb.append(Character.toChars(127479));
    System.out.println(sb);

imprime ????????, que le client peut choisir d'afficher comme un drapeau français, ou autrement .

9
leo

Le problème est que la notation "\ uXXXX" concerne 4 chiffres hexadécimaux, formant un char 16 bits.

Vous avez les points de code Unicode au-dessus de la plage de 16 bits, à la fois U + F1EB et U + 1F1F7. Cela sera représenté avec deux caractères, une paire dite de substitution.
Vous pouvez utiliser les points de code pour créer une chaîne:

int[] codepoints = {0x1F1EB, 0x1F1F7};
String s = new String(codepoints, 0, codepoints.length);

Ou utilisez les paires de substitution, dérivables comme ceci:

System.out.print("\"");
for (char ch : s.toCharArray()) {
    System.out.printf("\\u%04X", (int)ch);
}
System.out.println("\"");

Donnant

"\uD83C\uDDEB\uD83C\uDDF7"

Réponse au commentaire: Comment décoder

"\ uD83C\uDDEB" sont deux caractères de substitution de 16 bits représentant U + 1F1EB et "\ uD83C\uDDF7" est la paire de substitution de U + 1F1F7.

private static final int CP_REGIONAL_INDICATOR = 0x1F1E7; // A-Z flag codes.

/**
 * Get the flag codes of two (or one) regional indicator symbols.
 * @param s string starting with 1 or 2 regional indicator symbols.
 * @return one or two ASCII letters for the flag, or null.
 */
public static String regionalIndicator(String s) {
    int cp0 = regionalIndicatorCodePoint(s);
    if (cp0 == -1) {
        return null;
    }
    StringBuilder sb = new StringBuilder();
    sb.append((char)(cp0 - CP_REGIONAL_INDICATOR + 'A'));
    int n0 = Character.charCount(cp0);
    int cp1 = regionalIndicatorCodePoint(s.substring(n0));
    if (cp1 != -1) {
        sb.append((char)(cp1 - CP_REGIONAL_INDICATOR + 'A'));
    }
    return sb.toString();
}

private static int regionalIndicatorCodePoint(String s) {
    if (s.isEmpty()) {
        return -1;
    }
    int cp0 = s.codePointAt(0);
    return CP_REGIONAL_INDICATOR > cp0 || cp0 >= CP_REGIONAL_INDICATOR + 26 ? -1 : cp0;
}

System.out.println("Flag: " + regionalIndicator("\uD83C\uDDEB\uD83C\uDDF7"));
Flag: EQ
19
Joop Eggen

Si vous voulez utiliser souvent les émoticônes, il pourrait être judicieux d'utiliser une bibliothèque qui gérera ce genre de choses unicode pour vous: emoji-Java

Vous ajouteriez simplement la dépendance maven:

<dependency>
  <groupId>com.vdurmont</groupId>
  <artifactId>emoji-Java</artifactId>
  <version>1.0.0</version>
</dependency>

Et appelez le EmojiManager:

Emoji emoji = EmojiManager.getForAlias("fr");
System.out.println("HEY: " + emoji.getUnicode());

La liste complète des emojis pris en charge est here .

4
Vincent Durmont

Je suppose que vous voulez réaliser quelque chose comme ça

 enter image description here

Laissez-moi vous donner 2 exemples d'unicodes pour les drapeaux de pays:

pour la Roumanie --->\uD83C\uDDF7\uD83C\uDDF4

pour AMÉRIQUE --->\uD83C\uDDFA\uD83C\uDDF8

Vous pouvez obtenir ceci et d'autres drapeaux de pays unicodes sur ce site Unicodes Emoji

Une fois que vous entrez sur le site, vous verrez une table avec beaucoup d’emoji. Sélectionnez l'onglet avec les drapeaux de cette table (il est facile de le trouver), puis tous les drapeaux de pays apparaîtront. Vous devez sélectionner un drapeau dans la liste, le drapeau de votre choix ... mais un seul. Après cela, un code texte apparaît dans la boîte de message ... ce n'est pas important. L'important est que vous deviez regarder à la droite du site où apparaissent le drapeau et le nom du pays du drapeau que vous avez sélectionné. Cliquez dessus, et sur la page qui s’ouvrira, vous devez trouver la TABLE nommée Emoji Character Encoding Data. Faites défiler jusqu'à la dernière partie de la table où vous avez écrit: C/C++/Java Src ... Vous y trouverez le drapeau unicode correct. Attention, sélectionnez toujours le type Unicode qui est long comme ça, parfois si vous ne le faites pas attention, vous pouvez sélectionner un simple Unicode, pas si long comme ça. Alors garde cela en tête. 

Indications image 1

 enter image description here

Image d'indication 2

 enter image description here

En fin de compte, je posterai un exemple de code d'une application Android qui fonctionnera sous Java de la même manière.

ArrayList<String> listLanguages = new ArrayList<>();
    listLanguages.add("\uD83C\uDDFA\uD83C\uDDF8  " + getString(R.string.English));
    listLanguages.add("\uD83C\uDDF7\uD83C\uDDF4  " + getString(R.string.Romanian));

Un autre exemple personnalisé simple:

String flagCountryName = "\uD83C\uDDEF\uD83C\uDDF2 Jamaica";

Vous pouvez utiliser cette variable là où vous en avez besoin. Cela vous montrera le drapeau de la Jamaïque devant le texte.

C'est tout, si vous n'avez pas compris quelque chose, il suffit de demander.

0
Cristian Babarusi