java (NetBeans) 是否支持表情符号?

Emojis' support in java (NetBeans)?

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

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

Netbeans 是否可以 detect/support 这些表情符号? 几个例子: (,✋)

我正在使用缓冲 reader 和写入器。

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

          System.out.println(line);

        } 

干杯!

我认为这些表情符号采用 UTF-8 格式,因此您可以像这样使用带有字符集的 InputStreamReader:

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

您看到正方形(可能是豆腐)是因为您没有能够呈现这些字符的字体。所以第一步是确保你有这样的字体。

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

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

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

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