在 Java 上生成带有表情符号问题的图像

Image generation with Emoji issue on Java

提问人:Long 提问时间:9/16/2023 最后编辑:Long 更新时间:9/16/2023 访问量:37

问:

目前,当我尝试在 noto 图像的 https://emojiterra.com/pilot/ 上使用代码打印/记录/生成图像时: \uD83E\uDDD1\u200D\u2708\uFE0F。 它总是显示 2 个表情符号:🧑 ✈️而不是 noto 的 1 个表情符号。enter image description here

log.info(“\uD83E\uDDD1\u200D\u2708\uFE0F”) 始终显示 🧑 ✈️

使用 Graphics2D 时,它会生成这样的图像: enter image description here 我想问题发生是因为 java 只支持 16 位字符,而 noto 表情符号是 32 位。

有没有办法在 java 中使用 32 位表情符号打印/生成图像?

Java UTF-8 表情符号

评论

0赞 VGR 9/16/2023
有趣的是,您的问题在我的浏览器中显示了一个飞行员表情符号。我猜你的意思是说日志显示🧑✈️.这表明您的字符串是正确的;问题在于您如何查看日志。并非所有编辑者和文本查看者都知道完整的 Unicode 表情符号序列集。
0赞 Long 9/16/2023
不仅是日志,而且当我尝试使用 Graphics2D 生成图像时,图像还包含 2 个表情符号而不是 1 个 noto 图像。
0赞 VGR 9/16/2023
我几乎可以肯定,Java 2D 渲染器识别的 Unicode 表情符号序列很少(如果有的话)。虽然我不确定这种渲染在多大程度上是字体的责任。
1赞 Holger 9/21/2023
Java 从 Java 5 开始可以处理增补字符。但是,您的表情符号由两个代码点和一个零宽度连接器组成,后跟一个变体选择器。只理解 16 位字符的软件会说这个字符串有五个字符(就像这样做一样),但会正确地告诉你有四个代码点。而会告诉你它是否被识别为一个逻辑字符(它是在 Java 13 和更新版本中)。不过,字体也很重要string.length()string.codePointCount(0, string.length())new Scanner("\uD83E\uDDD1\u200D\u2708\uFE0F") .findAll("\\X").count()
0赞 Long 9/27/2023
问题是我现在使用 java 8 的项目。我是否需要将 java 升级到 13 或更高版本才能使其正常工作?

答: 暂无答案