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的主要内容,如果未能解决你的问题,请参考以下文章
《现代命令行工具指南》15.表情符号:在命令行中查找表情符号 - emoj
《现代命令行工具指南》15.表情符号:在命令行中查找表情符号 - emoj