2016-08-24 11 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後の)絵文字はとして現れています?。私はUTF-8、UTF-16BE、UTF-16LE、UTF-32BE、およびUTF-32LEを使用してエンド・ド・インしようとしましたが、無駄です。このシステムではjdk 1.63.0.3 of twitter4jが使用されています。私はここで何が欠けていますか?

+2

は問題があなたのコンソールのフォントに、より関連している可能性があります。java 8で

?値は正しいはずですが、出力では値を表示できません。 – meistermeier

答えて

0

文字列には既にUnicodeが含まれているため、同じ文字列に変換する必要はありません。 byte[]の場合、これらのバイトのエンコーディングを示す必要があります。

しかし、問題は、コンソールにUTF-8のようなUnicodeエンコーディングがなく、フォントに絵文字が含まれていない可能性があるということです。 System.out.printlnの問題。この場合、System.outは、絵文字を表すことができず、代わりに疑問符を印刷した他のエンコーディングに含まれていました。

絵文字が到着したかどうかを確認するためにできることは、Unicodeコードポイントをダンプすることです。

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)); 
} 
関連する問題