【问题标题】:Emojis' support in java (NetBeans)?表情符号在 java (NetBeans) 中的支持?
【发布时间】:2016-09-26 13:04:12
【问题描述】:

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

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

Netbeans 是否可以检测/支持这些表情符号? 几个例子: (????,????,??????,??????,✋)

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

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

          System.out.println(line);

        } 

干杯!

【问题讨论】:

    标签: java netbeans unicode bufferedreader filereader


    【解决方案1】:

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

    即使拥有能够呈现这些字符的字体并不意味着它们将在 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
    

    【讨论】:

    • 这很有帮助,谢谢!
    【解决方案2】:

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

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

    【讨论】:

    • 不幸的是,运气不好,仍然面临同样的问题:/
    • 对不起,我误解了你的问题。我认为没有办法在终端中显示这个表情符号。我的最后一个想法是将它们转换为它们的代码点并用 println() 显示它们的数字
    • Marvin,谢谢你指出这一点,得到他们的代码点编号对我来说已经足够了,(我只需要计算他们被使用了多少次)。您能否指导如何打印代码点值,而不是方括号 []。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2019-02-27
    • 2013-08-10
    • 2014-01-20
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多