it-swarm.com.de

Erstellen Sie einen String mit Emoji-Unicode-Flaggenländern

ich muss einen String mit einer Landesflagge Unicode Emoji erstellen. Ich habe folgendes gemacht:

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

Ich erwarte eine Landesflagge, aber ich habe ... Wie bekomme ich eine Emoji-Landesflagge in String mit den Unicode-Zeichen?

11
colymore

Sie sollten dazu in der Lage sein, einfach toChars aus Java.lang.Character zu verwenden.

Das funktioniert für mich:

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

gibt ???????? aus, den der Client auswählen kann wie eine französische Flagge, oder auf andere Weise anzeigt.

9
leo

Das Problem ist, dass die "\ uXXXX" -Notation für 4 Hexadezimalziffern gilt und ein 16-Bit char bildet.

Sie haben Unicode-Codepunkte über dem 16-Bit-Bereich, sowohl U + F1EB als auch U + 1F1F7. Dies wird mit zwei Zeichen dargestellt, einem sogenannten Ersatzpaar.
Sie können entweder die Codepunkte verwenden, um eine Zeichenfolge zu erstellen:

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

Oder verwenden Sie die Ersatzpaare, die folgendermaßen ableitbar sind:

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

Geben

"\uD83C\uDDEB\uD83C\uDDF7"

Antwort auf den Kommentar: Wie man dekodiert

"\ uD83C\uDDEB" sind zwei 16-stellige Ersatzzeichen, die U + 1F1EB darstellen, und "\ uD83C\uDDF7" ist das Ersatzpaar für 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

Wenn Sie häufig Emojis verwenden möchten, kann es sinnvoll sein, eine Bibliothek zu verwenden, die diese Unicode-Funktionen für Sie erledigt: emoji-Java

Sie würden nur die Maven-Abhängigkeit hinzufügen:

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

Und rufen Sie den EmojiManager an:

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

Die gesamte Liste der unterstützten Emojis ist hier .

4
Vincent Durmont

Ich nehme an, Sie möchten so etwas erreichen

enter image description here

Ich möchte Ihnen zwei Beispiele für Unicodes für Länderflaggen geben:

für RUMÄNIEN --->\uD83C\uDDF7\uD83C\uDDF4

für AMERICA --->\uD83C\uDDFA\uD83C\uDDF8

Sie können diese und andere Länderflaggen unicodes von dieser Site erhalten Emoji Unicodes

Sobald Sie die Site betreten, sehen Sie eine Tabelle mit viel Emoji. Wählen Sie die Registerkarte mit FLAGS aus dieser Tabelle aus (ist leicht zu finden), und alle Länderflaggen werden angezeigt. Sie müssen eine Flagge aus der Liste auswählen, jede beliebige Flagge ... aber nur EINE. Danach erscheint ein Textcode im Meldungsfeld ... das ist nicht wichtig. Wichtig ist, dass Sie auf der rechten Seite der Site nachsehen müssen, wo Flagge und Ländername Ihrer ausgewählten Flagge angezeigt werden. Klicken Sie darauf und auf der sich öffnenden Seite müssen Sie die TABELLE Emoji Character Encoding Data finden. Scrollen Sie bis zum letzten Teil der Tabelle, in dem Folgendes angezeigt wird: C/C++/Java Src .. Dort finden Sie das richtige Unicode-Flag. Achtung, wählen Sie immer den Unicode, der so lang ist. Manchmal können Sie, wenn Sie nicht vorsichtig sind, einen einfachen Unicode auswählen, nicht so lange. Denken Sie also daran. 

Hinweise Bild 1

enter image description here

Hinweisbild 2

enter image description here

Am Ende werde ich einen Beispielcode aus einer meiner Android-Apps veröffentlichen, der auf Java genauso funktionieren wird.

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

Ein weiteres einfaches Beispiel:

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

Sie können diese Variable dort verwenden, wo Sie sie benötigen. Dies zeigt Ihnen die Flagge von Jamaika vor dem Text.

Das ist alles, wenn Sie etwas nicht verstanden haben, fragen Sie einfach.

0