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
我正在尝试制作一个从 .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