2016-09-26 6 views
1

Я пытаюсь сделать программу, которая читает текст из TXT-файла, я хочу подсчитать, сколько раз использовалось определенное слово.Поддержка Emojis в java (NetBeans)?

Текст, однако, также содержит emojis, Java печатает эти emojis как квадратные скобки '[]' в консоли, когда я печатаю строку.

В любом случае Netbeans может обнаружить/поддержать эти эможисы? несколько примеров: (,,,, ✋)

Im using буферизованный читатель и писатель.

 while((line = bufferedReader.readLine()) != null) { 

      System.out.println(line); 

     } 

Cheers!

ответ

2

Вы видите квадраты (вероятно tofus), потому что у вас нет шрифта, способного для отображения этих символов. Итак, первым шагом было бы обеспечить, чтобы у вас был такой шрифт.

Даже наличие шрифта, способного отображать эти символы, не означает, что они будут правильно напечатаны в консоли NetBeans. Это потому, что Emoji обычно не содержит BMP codepoints (> 0xFFFF), поэтому кодируется двумя символами UTF-16 (->"\uD83D\uDE48"). Эти 2 символа: Surrogate Pairs, которые являются способом представления не-BMP-кодовых точек с использованием кодовых точек BMP.

Предполагается, что IDE конвертирует "\uD83D\uDE48" в один код (0x1F648), а затем запрашивает шрифт для рендеринга этого кода, а не двух разделенных суррогатных пар.

Java Строка класс имеет несколько методов для решения кодовых вместо символов:

String.codepoints() 
String.codePointAt(int i) 
Character.isBmpCodePoint(int cp) 
Character.isSurrogate(char c) 
Character.isHighSurrogate(char c) 
Character.isLowSurrogate(char c) 

Eg

Integer.toHexString("\uD83D\uDCA9".codePointAt(0)) -> 1f4a9 
+0

Это очень помогает, спасибо! –

0

Я думаю, что эти Emojis являются отформатированный в UTF-8, так что вы могли бы использовать InputStreamReader с НаборСимволов, как это:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8")); 
+0

не повезло, к сожалению, до сих пор сталкивается с теми же вопрос:/ –

+0

Im извините, но я не понял ваш вопрос. Я не думаю, что есть способ отобразить эту эмуляцию в терминале. Моя последняя идея состоит в том, чтобы преобразовать их в их кодовую точку и отобразить их число с помощью println() – Marvin

+0

Марвин, спасибо за то, что указали это, получив их номер кодовой точки, достаточно для меня (мне просто нужно подсчитать, сколько раз они был использован). Можете ли вы любезно узнать, как печатать значение кодовой точки, а не квадратные скобки []. Большое спасибо. –

Смежные вопросы