2016-08-24 6 views
0

Ich erhalte Twitter-Tweets und versuche, sie in einer flachen Datei zu speichern. Ich habe den folgenden Code:Emoji nicht codieren

String jsonString = new Gson().toJson(tweets); 

byte[] utf8JsonString = jsonString.getBytes("UTF-8"); 

String utf8json = new String(utf8JsonString, "UTF-8"); 

System.out.println(utf8json); 

Ausgang:

..."id":768260789744443392,"text":"#emojicity5 ?","source"... 

Die Emoji (kurz nach # emojicity5) erscheinen wie?. Ich habe versucht, mit UTF-8, UTF-16BE, UTF-16LE, UTF-32BE und UTF-32LE endode, aber ohne Erfolg. Dieses System verwendet jdk 1.6 und 3.0.3 of twitter4j. Was fehlt mir hier?

+2

das Problem mehr mit in der Konsole auf die Schriftart sein kann? Der Wert sollte richtig sein, aber die Ausgabe kann nicht angezeigt werden. – meistermeier

Antwort

0

Zeichenfolge enthält bereits Unicode, keine Konvertierung in dieselbe Zeichenfolge erforderlich. Wann zu oder von byte[] muss die Codierung dieser Bytes angeben.

Das Problem ist jedoch, dass die Konsole wahrscheinlich keine Unicode-Kodierung wie UTF-8 hat und sogar nicht die Emoji in den Fonts hat. Ein Problem von System.out.println. In diesem Fall befand sich System.out in einer anderen Kodierung, die das Emoji nicht darstellen konnte, und druckte stattdessen ein Fragezeichen.

Was Sie tun können, um zu überprüfen, ob das Emoji angekommen ist, ist Dump die Unicode-Code-Punkte.

in Java 8:

jasonString.toCodePoints() 
     .filter(cp -> cp >= 256) 
     .forEach(cp -> { 
      System.out.printf("U+%X = %s%n", 
       cp, Character.getName(cp)); 
     }); 

boolean containsEmoji(String s) { 
    return s.codePoints().anyMatch(cp -> 
     UnicodeBlock.of(cp).equals(UnicodeBlock.EMOTICONS)); 
}