2016-08-24 5 views
0

Я получаю твиттер-твиты и пытаюсь сохранить их в плоском файле. У меня есть следующий код:Emoji не кодируется

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) появляются, как?. Я попытался подключиться через UTF-8, UTF-16BE, UTF-16LE, UTF-32BE и UTF-32LE, но безрезультатно. Эта система использует jdk 1.6 и 3.0.3 of twitter4j. Что мне здесь не хватает?

+2

Может быть проблема больше связана с шрифта в консоли? Значение должно быть правильным, но ваш вывод не может отобразить его. – meistermeier

ответ

0

Строка уже содержит Юникод, нет необходимости конвертировать обратно в ту же строку. Когда от byte[] необходимо указать кодировку этих байтов.

Однако проблема заключается в том, что консоль, вероятно, не имеет кодировки Unicode, такой как UTF-8, и даже может не иметь emoji в шрифтах. Проблема System.out.println. В этом случае System.out находилась в некотором другом кодировании, которое не могло представлять emoji и вместо этого печатало вопросительный знак.

Что вы можете сделать, чтобы проверить, прибыл ли emoji, сбросить кодовые точки Юникода.

В 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)); 
} 
Смежные вопросы