如何将表情符号的 Unicode U+xxxx 表示形式转换为 Java 中的表情符号?

0 java

我有一个用 Unicode 表示表情符号的字符串,如下所示:

“你好U+1F601”

我想把它转换成:

“你好 ”

我尝试使用该parseInt()方法解码它们并将其转换为char,但我不断得到像这样的黑白字形 - 。

有什么指示我怎样才能用Java达到预期的结果吗?

PS:unescapeJava()这个方法在这里不起作用。我已经尝试过,也尝试过其他类似线程的其他答案。

Joa*_*uer 5

U+1F601 描述了一个 Unicode 代码点

通常,当您想要将代码点转换为StringJava 中的代码点时,您所描述的内容就会起作用。

然而,它仅在代码点位于Basic Multilingual Plane时才有效,这基本上意味着它小于 U+10000 (即最多 4 个十六进制数字)。BMP 包含常用的字符,但显然包含许多较新的表情符号。

如果高于该点,则需要使用两个值通过一些数学char运算组合成单个代码点。

幸运的是,您不必自己进行数学计算,而是可以使用以下版本Character.toString

Character.toString(0x1F601);
Run Code Online (Sandbox Code Playgroud)

要完全实现替换,我们可以简单地使用Matcher.replaceAll

String input = "Hello U+1F601";
Pattern p = Pattern.compile("U\\+([0-9a-fA-F]{4,6})");
String result = p.matcher(input).replaceAll(r -> Character.toString(Integer.parseInt(r.group(1), 16)));
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)