Android 上的 Unicode 到 Emoji

Posted

技术标签:

【中文标题】Android 上的 Unicode 到 Emoji【英文标题】:Unicode to Emoji on Android 【发布时间】:2021-05-17 17:25:57 【问题描述】:

假设String 的值为"U+1F601"(例如,它可以是任何其他表情符号),android动态 将其转换为表情符号的视觉表示的正确方法是什么对方? (不允许硬编码,必须是动态的,因为这是服务器数据)。我知道理论上我可以将它映射到0x1F601,但这没有用,因为它不能在运行时完成。

我已经检查了关于这个主题的所有可用问题,但似乎没有一个答案能解决我的问题。

提前致谢。

注意:请记住,表情符号可以由 N 个 Unicode 值(例如U+1F468, U+200D, U+1F468, U+200D, U+1F467, U+200D, U+1F466)组成,并且具有肤色修饰符。

【问题讨论】:

在发布后,在答案到达后更改问题的性质是不礼貌的,从而使现有的答案看起来足够或偏离主题。 【参考方案1】:

tl;博士

表情符号没有什么特别之处。每个表情符号只是一个文本字符。将您的文本解析为该字符的 Unicode code point 数字,然后构建一个 String

new StringBuilder()
.appendCodePoint( 
    Integer.decode(
        "U+1F601".replace( "U+" , "0x" ) 
    )
)
.toString() 

?

详情

将输入字符串中的“U+”替换为“0x”。

使用Integer.decode 将该十六进制文本转换为整数。

使用StringBuilder 将整数解析为放入String 对象中的Unicode 字符的代码点。

        String input = "U+1F601".replace( "U+" , "0x" ) ;
        int x = Integer.decode( input ) ;
        String y = new StringBuilder().appendCodePoint( x ).toString() ;

        System.out.println ( x ) ;
        System.out.println ( y ) ;

看到这个code run live at IdeOne.com。

128513
?

请注意,我们确实没有使用过时的char 类型。这种类型现在是遗留的,甚至无法表示 Unicode 中定义的一半字符。而是使用整数作为每个字符的代码点。

【讨论】:

谢谢罗勒。虽然这在理论上解决了解析简单表情符号的问题,但它并不完整,因为它没有考虑复杂的表情符号,例如带有肤色修饰符的表情符号(例如U+1F486, U+1F3FE)或其他几个表情符号化合物(由几个表情符号组成,例如U+1F468, U+200D, U+1F468, U+200D, U+1F467, U+200D, U+1F466)。 @mradzinski 那么你应该要求那些。在 Stack Overflow 上,我们尝试按要求回答问题。我建议您发布第二个关于您的评论内容更复杂的问题。 我最初指定“它可以是任何其他表情符号”:)。但你说得对,我编辑了原始问题以反映 Emoji 的复杂性。 您的编辑很粗鲁、无礼且令人困惑。相反,第二个问题是合适的。它们是两个不同的问题:(a) 解析字符代码点编号的十六进制字符串,(b) 处理 Unicode 中字符变体的代码点组合。 你可能是对的。我最初认为表情符号的复杂性是理所当然的。我无意粗鲁,所以我会将这个问题标记为已解决,因为它解决了原始问题。感谢您的帮助。

以上是关于Android 上的 Unicode 到 Emoji的主要内容,如果未能解决你的问题,请参考以下文章

nodejs,javascript过滤emoj表情

emoj表情过滤

《现代命令行工具指南》15.表情符号:在命令行中查找表情符号 - emoj

《现代命令行工具指南》15.表情符号:在命令行中查找表情符号 - emoj

《现代命令行工具指南》15.表情符号:在命令行中查找表情符号 - emoj

如何将Emoj表情插入mysql5.6数据库