2016-08-24 90 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)); 
}