Eclipse IDE, обрабатывающая смайлики с использованием суррогатных пар
Я не могу найти четкий ответ на это. Поддерживает ли ECLIPSE IDE эмодзи? Я много читал о суррогатных парах здесь о переполнении стека, но я не могу получить четкий ответ на этот вопрос.
Мне приходится читать в текстовом файле символ за символом, и я использую FileInputStream.
Можно ли обработать эмодзи с помощью суррогатных пар? Я хочу использовать несколько яблочных смайликов. В частности: обрабатывая их, я имею в виду, что я хотел бы идентифицировать их как определенные эмоции при чтении в файле.
Если так, может кто-нибудь показать мне пример?
1 ответ
InputStreams предназначены для чтения байтов; Читатели предназначены для чтения символов. Поэтому вы должны использовать Reader, полученный из Files.newBufferedReader, или использовать FileReader или InputStreamReader.
Хотя Java использует суррогатные пары внутри String для представления смайликов и многих других типов символов Unicode, вам не нужно иметь дело с суррогатными парами напрямую. Суррогатные значения существуют только потому, что многие символьные значения слишком велики для Java char
тип. Если вы читаете отдельные символы как int
значения (например, с помощью метода CharSequence.codePoints), вы будете каждый раз получать целые значения символов и никогда не будете видеть или иметь дело с суррогатным значением.
На момент написания статьи смайлики определены в Юникоде как блок смайликов, часть блока дополнительных символов и пиктограмм и три устаревших символа в блоке разных символов.
Таким образом, использование BufferedReader и обход данных символа с помощью целых может выглядеть следующим образом:
try (BufferedReader reader =
Files.newBufferedReader(Paths.get(filename), Charset.defaultCharset())) {
IntStream chars = reader.lines().flatMapToInt(String::codePoints);
chars.forEachOrdered(c -> {
if ((c >= 0x2639 && c <= 0x263b) ||
(c >= 0x1f600 && c < 0x1f650) ||
(c >= 0x1f910 && c < 0x1f930)) {
processEmoji(c);
}
});
}