Eclipse IDE使用代理对处理表情符号

时间:2016-11-01 19:29:53

标签: java eclipse surrogate-pairs

我无法找到明确的答案。 ECLIPSE IDE是否支持emojis?关于堆栈溢出,我已经阅读了很多关于代理对的内容,但是我无法得到明确的答案。

我必须逐个字符地阅读文本文件,并且我正在使用FileInputStream。

是否可以使用代理对处理表情符号?我想要使​​用少数几个苹果表情符号。具体如下: 通过处理它们,我的意思是我想在阅读文件时将它们识别为特定的表情符号。

如果是这样,有人能告诉我一个例子吗?

1 个答案:

答案 0 :(得分:1)

InputStream用于读取字节; Readers用于阅读字符。所以你应该使用从Files.newBufferedReader获得的Reader,或者使用FileReader或InputStreamReader。

尽管Java在String中使用代理项对来表示emojis和许多其他类型的Unicode字符,但您不需要直接处理代理项对。仅存在代理值,因为许多字符值对于Java char类型而言太大。如果您将单个字符读作int值(例如,使用CharSequence.codePoints方法),则每次都会获得整个字符值,并且您将永远不会看到或必须处理代理值。< / p>

在撰写本文时,emojis由Unicode定义为Emoticons块,Supplemental Symbols and Pictographs块的一部分,以及Miscellaneous Symbols块中的三个遗留字符。

因此,使用BufferedReader并使用int遍历字符数据可能如下所示:

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);
        }
    });
}