我无法找到明确的答案。 ECLIPSE IDE是否支持emojis?关于堆栈溢出,我已经阅读了很多关于代理对的内容,但是我无法得到明确的答案。
我必须逐个字符地阅读文本文件,并且我正在使用FileInputStream。
是否可以使用代理对处理表情符号?我想要使用少数几个苹果表情符号。具体如下: 通过处理它们,我的意思是我想在阅读文件时将它们识别为特定的表情符号。
如果是这样,有人能告诉我一个例子吗?
答案 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);
}
});
}