通过 unicode 在文本字段中显示具有肤色变化的表情符号

Display emojis with skin color variation in a textfield via unicode

我目前正在尝试通过 unicode 在文本视图中显示表情符号。 我知道更改 \U0001f4ea -> 0x1f4ea 然后调用 textView.setText(new String(Character.toChars(0x1f4ea))); 会在文本视图中显示表情符号。然而,大多数包含面部的现代表情符号在后面都有一个额外的 unicode 字符,例如 \U0001f1fa\U0001f1ff 用于颜色变体。

我不确定如何将 2 个 unicode 字符转换为一个字符。

有没有一种方法可以通过将 unicode 转换为字符串来使用相同的方法来显示所有颜色变化?我必须使用其他方法吗?不幸的是,手动转换所有 unicode 不是一种选择。

感谢您的帮助!

I am unsure on how to convert the 2 unicode characters into a char

您没有将两个字符转换为一个字符;您将它们保存为字符串,布局引擎将它们显示为单个表情符号。

String 构造函数采用 UTF-16 编码形式的字符串,UTF-16 将使用 代理项对 表示补充平面字符(U+10000 或更高) , 这是两个字符的序列。要为带有肤色修饰符的表情符号构建字符串,您需要传入 UTF-16 字符序列。例如,对于由 Unicode 字符序列 < U+1F91A, U+1F3FC > 组成的字符串,构造函数需要一个包含 4 个字符的数组,它们是该序列的 UTF-16 表示,[0xD83E, 0xDD1A, 0xD83C, 0xDFFC ].

A Character.toChars() 调用将为 Unicode 代码点生成 UTF-16 表示。如果代码点是补充平面字符,则 toChars() 将为该字符生成代理项对。但是您的情况需要两个单独的 Unicode 字符,不能在单个 toChars() 调用中处理。两个单独的 toChars() 调用可用于序列中的两个 Unicode 字符,但您需要一个具有四个字符的组合数组的字符串。

我不精通 Java 或 Android 类,因此无法为您提供最有效的方法。我确定您可以使用 StringBuilder,先构建第一个字符,然后附加第二个字符。但可能还有更直接的方法。