Java 是否所有表情符号都是用BMP之外的代码点构建的,就像在代理项对中一样?

Java 是否所有表情符号都是用BMP之外的代码点构建的,就像在代理项对中一样?,java,unicode,utf-8,java-8,utf-16,Java,Unicode,Utf 8,Java 8,Utf 16,我正在努力学习更多关于表情符号的知识,以及它们是如何用Unicode表示的。我在某个地方读到emojis是用代理项对构造的,而我最近发现了“\u263A”,它代表”☺'. 我只是想了解是否有一个特定的规则来构造所有表情符号,或者是否有任何unicode值(在BMP内部或外部)可以表示表情符号? 另外,如果有人能给我指出一个JAVA API,它可以识别一个字符是表示表情符号还是表情符号表示的一部分(在代理项对的情况下)。据我所知,JAVA没有提供任何特殊API来决定某个字符是否表示表情符号。但是,

我正在努力学习更多关于表情符号的知识,以及它们是如何用Unicode表示的。我在某个地方读到emojis是用代理项对构造的,而我最近发现了“\u263A”,它代表”☺'. 我只是想了解是否有一个特定的规则来构造所有表情符号,或者是否有任何unicode值(在BMP内部或外部)可以表示表情符号?
另外,如果有人能给我指出一个JAVA API,它可以识别一个字符是表示表情符号还是表情符号表示的一部分(在代理项对的情况下)。

据我所知,JAVA没有提供任何特殊API来决定某个字符是否表示表情符号。但是,您可以从下载表情符号的实际列表,并编写代码自己检查。根据字符类型(character.getType(ch)),我看到它返回28(其他符号)或19(代理)。也许它可以覆盖所有表情符号。但是感谢您的链接,也许检查整个列表是现在唯一可用的选项。它提供了Java方法,例如
isEmoji()
getUnicode()
getAll()
,可能值得一看。一开始自己编写代码可能不太困难,但由于Unicode的每个版本都引入了新的表情符号,因此您需要维护该代码。此外,作为一个不相关的问题,您的文章提出了两个不同的问题,最好在两个独立的问题中提出它们。(其中一个仍将作为主题关闭,但我认为另一个将保留下来。)您应该使用
Character.getType(int codePoint)
来确定字符的类型,无论它是否在BMP中。另请参见
String.codePointAt(int-index)
。您提到的字符
U+263A
在“表情符号”类别出现之前就已经存在了。有关其他示例,请参见。新的表情符号是在BMP之外定义的,不是作为一种风格决定,只是因为BMP内部没有多少空间来定义这些新字符。