2014-10-07 11 views
6

ich brauche einen String mit einer Landesflagge Unicode erstellen emoji..I dies tat:erstellen String mit Emoji Unicodeflag Länder

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

Erwartung einer Landesflagge, aber ich havent..How kann ich eine Unicode bekommen Länderflagge Emoji in String mit den Unicodes-Zeichen?

+0

Was hast du bekommen, wenn nicht? – leo

+0

Was machst du mit der Schnur danach? Und welche Idee haben die 'StringEscapeUtils.unescapeJava' Aufrufe? – weston

+0

Ich bekomme ἞E἟9἟7἟A – colymore

Antwort

6

Sie sollten das einfach mit toChars von java.lang.Character tun können.

Dies funktioniert für mich:

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

druckt , die der Client can chose to Anzeige wie ein französisch Flagge, or in other ways.

-3

Blick auf Creating Unicode character from its number

konnte nicht bekommen meine Maschine die Unicode haben Sie da zu drucken, aber für andere Werte funktioniert es.

+0

Dies funktioniert für mich, wenn ich in einfachen Unicode-Zeichen verwendet, aber Flaggen Unicodes werden von zwei Unicodes. – colymore

+0

Alles in den 2 uplooted Antworten erwähnt, war bereits in dem Link, den ich zur Verfügung gestellt. Versteh nicht, warum ich dann runtergestimmt werde. – Thomas

14

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

Sie haben Unicode-Codepunkte oben die 16-Bit-Bereich, die beide U + F1EB und U + 1F1F7. Dies wird mit zwei Zeichen dargestellt, einem sogenannten Ersatzpaar.
Sie entweder die Codepoints verwenden, um eine Zeichenfolge zu erstellen:

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

Oder die Ersatzpaare verwenden, wie dies ableitbar:

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: How to Dekodieren

"\ uD83C \ uDDEB" sind zwei 16-Bit-Surrogat-Zeichen darstellt U + 1F1EB 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 
+0

Sie sind auch richtig. – colymore

+0

Hey @Joop Bitte sagen Sie mir, wie Sie diese "\ uD83C \ uDDEB \ uD83C \ uDDF7" dekodieren. Vielen Dank für diesen Code. –

+0

@RobinRoyal erweiterte Antwort mit, wie man "EQ" von der Schnur erhält. –

4

Wenn Sie häufig verwenden Emojis wollen, könnte es gut sein, eine Bibliothek zu verwenden, die die Unicode-Material für Sie behandeln würde: emoji-java

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

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

und rufen Sie die EmojiManager:

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

die gesamte Liste der Unterstützung ed emojis ist here.

+0

Danke @Vincent für diese Bibliothek! –