我正在检索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.6
和3.0.3 of twitter4j
。我在这里错过了什么?
答案 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));
}