Emojis在java(NetBeans)中的支持?

时间:2016-09-26 13:04:13

标签: java netbeans unicode bufferedreader filereader

我试图制作一个从.txt文件中读取一些文本的程序,我想计算某个单词被使用了多少次。

然而,文本中还包含表情符号,当我打印该行时,Java会在控制台中将这些表情符号打印为方括号“[]”。

无论如何Netbeans可以检测/支持这些表情符号吗? 几个例子: (,,,,✋)

我正在使用缓冲的读写器。

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

          System.out.println(line);

        } 

干杯!

2 个答案:

答案 0 :(得分:2)

你看到的是正方形(可能是tofus),因为你没有能够渲染这些角色的字体。所以第一步是确保你有这样的字体。

即使拥有能够呈现这些字符的字体也不意味着它们将在NetBeans控制台中正确打印。这是因为表情符号通常是非BMP代码点(> 0xFFFF),因此用2个UTF-16字符( - > "\uD83D\uDE48")编码。这两个字符是Surrogate Pairs,它们是使用BMP代码点表示非BMP代码点的一种方式。

IDE应该将"\uD83D\uDE48"转换为单个代码点(0x1F648),然后要求字体呈现此代码点,而不是两个单独的代理对。

Java String类有几种方法来处理代码点而不是字符:

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

例如

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

答案 1 :(得分:0)

我认为这些Emojis是用UTF-8格式化的,所以你可以像这样使用带有charSet的InputStreamReader:

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