2016-08-24 71 views
0

我正在檢索Twitter推文並嘗試將它們保存到平面文件。我有以下代碼:表情符號未編碼

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

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

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

System.out.println(utf8json); 

輸出:

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

通過表情符號(#剛經過emojicity5)的出現爲?我試圖endode使用UTF-8,UTF-16BE,UTF-16LE,UTF-32BE和UTF-32LE,但無濟於事。該系統使用jdk 1.63.0.3 of twitter4j。我在這裏錯過了什麼?

+2

可能問題更關係到控制檯中的字體?值應該是正確的,但是你的輸出不能顯示它。 – meistermeier

回答

0

字符串已經包含Unicode,不需要轉換回相同的字符串。 何時往返byte[]需要指出這些字節的編碼。

但問題是控制檯可能沒有像UTF-8這樣的Unicode編碼,甚至可能沒有字體中的表情符號。 System.out.println的問題。在這種情況下,System.out在其他編碼中不能表示表情符號,而是打印出問號。

你可以做什麼來檢查表情符號是否到達,是轉儲Unicode代碼點。

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