Android 上的 Unicode 表情符号

Unicode to Emoji on Android

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

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

提前致谢。

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

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 中定义的一半字符。相反,使用整数作为每个字符的代码点。