2016-08-24 2 views
0

트위터 트윗을 가져 와서 플랫 파일로 저장하려고합니다. 나는 다음과 같은 코드가 있습니다 :그림 이모티콘

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을 사용합니다. 내가 여기서 무엇을 놓치고 있니?

+2

이 문제가 콘솔에서 글꼴에 더 관련이있을 수 있습니다 : 자바 8에서

? 값은 맞아야하지만 결과물에는 값이 표시 될 수 없습니다. – meistermeier

답변

0

문자열에 이미 유니 코드가 들어 있으므로 동일한 문자열로 다시 변환 할 필요가 없습니다. byte[]에서 또는 그 때까지는 해당 바이트의 인코딩을 나타낼 필요가 있습니다.

그러나 문제는 콘솔에 UTF-8과 같은 유니 코드 인코딩이 없으므로 글꼴에 그림이 포함되어 있지 않을 수도 있다는 것입니다. System.out.println의 문제. 이 경우 System.out은 이모티콘을 표현할 수없고 대신 물음표를 인쇄 한 다른 인코딩에 포함되었습니다.

이모티콘이 도착했는지 확인하기 위해 할 수있는 일은 유니 코드 코드 포인트를 덤프하는 것입니다.

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)); 
} 
관련 문제