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);
        }
    });
}
Другие вопросы по тегам