【问题标题】:How to read/get unicode value for an emoji in Java如何在 Java 中读取/获取表情符号的 unicode 值
【发布时间】:2019-12-07 04:32:37
【问题描述】:

我们正在尝试让我们的应用程序接受表情符号。我们正在尝试将表情符号限制为来自this list 的表情符号。

所以,我正在尝试读取表情符号的 unicode 值(例如,U+1F600 表示???

有人可以帮助我如何读取表情符号的 unicode 值吗?或我可以实现此验证的任何其他方式?使用编码值等?

        }  

String actualEmojiString = "????????";
            for(int i=0; i< actualEmojiString.codePointCount(0, actualEmojiString.length()); i++) {
                int codePoint = actualEmojiString.charAt(i);
                if(Character.isSurrogate(actualEmojiString.charAt(i))) {
                    codePoint = Character.toCodePoint(actualEmojiString.charAt(i), actualEmojiString.charAt(i));
                }
                System.out.println( "HexCode value for emoji: [" +  actualEmojiString.charAt(i) + "] is [" +"U+" + Integer.toHexString(codePoint | 0x10000).substring(0) +"]"
                        + "["+"\\u" + Integer.toHexString(codePoint | 0x10000).substring(1) + "]");

输出:

HexCode value for emoji: [?] is [U+1f03d][\uf03d]
HexCode value for emoji: [?] is [U+190200][\u90200]

【问题讨论】:

  • Java 使用 UTF16 字符串。相应地计划。另外,请在发布后查看您的问题,以便您可以单击“编辑”并修复您犯的任何格式错误:这根本不是一个格式正确的问题。

标签: java unicode emoji


【解决方案1】:

您通过混合代码点和字符使代码过于复杂。而是使用String.codePoints() 方法:

"??".codePoints().mapToObj(Integer::toHexString).forEach(System.out::println);

将 unicode 值打印为十六进制:

1f600
1f602

这可能根本不需要,因为 Java 支持 unicode String 文字。要检查文本是否包含表情符号,您只需执行以下操作:

"??".contains("?");

【讨论】:

  • 完美!非常感谢!!
  • 只是好奇。我可以以任何其他方式实现此验证,而不是依赖于 unicode 值的范围吗?感谢您的帮助!
  • @Sai 通常最好实现白名单验证而不是黑名单验证,请参阅this answer
  • 好的,我同意。再次感谢卡罗尔!
猜你喜欢
  • 2019-01-03
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 2019-02-12
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多