表情符号不编码

时间:2016-08-24 02:05:23

标签: java json decode encode emoji

我正在检索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之后)出现了?我试图使用UTF-8,UTF-16BE,UTF-16LE,UTF-32BE和UTF-32LE进行endode,但无济于事。此系统正在使用jdk 1.63.0.3 of twitter4j。我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

String已包含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));
}