来自 Java 的 Discord Webhook 消息中的表情符号和特殊字符不起作用
Posted
技术标签:
【中文标题】来自 Java 的 Discord Webhook 消息中的表情符号和特殊字符不起作用【英文标题】:Emojis and special characters in Discord webhook message from Java not working 【发布时间】:2021-10-06 09:18:18 【问题描述】:所以我基本上想要完成的是我想从一个频道复制用户的消息,并使用 Webhook,我想完全按照他们在另一个频道中输入的方式重写它。问题是表情符号以“?”的形式出现,许多特殊字符(例如 £、é 等)完全破坏了它。
我的代码如下所示:
package uniqueimpact.discordbot;
import java.io.IOException;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
public class MessageEvent extends ListenerAdapter
private static final String WEBHOOK = "webhook-url";
public void onGuildMessageReceived(GuildMessageReceivedEvent event)
if (!event.getAuthor().isBot())
String messageSent = event.getMessage().getContentRaw();
String formattedMessage = "";
for (int i = 0; i < messageSent.length(); i++)
char character = messageSent.charAt(i);
switch (character)
case '\\':
formattedMessage += "\\\\";
break;
case '\"':
formattedMessage += "\\\"";
break;
case '\n':
formattedMessage += "\\n";
break;
default:
formattedMessage += character;
String webhook = WEBHOOK;
DiscordWebhook disWebhook = new DiscordWebhook(webhook);
disWebhook.setContent(formattedMessage);
try
disWebhook.execute();
catch (IOException e)
e.printStackTrace();
此代码只是侦听消息,然后对其进行格式化以转义反斜杠、引号和换行符,然后使用 this code which I copied 将消息发送到 Webhook。
我知道表情符号和这些特殊字符是扩展的 Unicode 字符集的一部分,但我不确定如何处理这些信息。因此,如果有人知道我该如何解决这个问题,那将不胜感激。 :)
【问题讨论】:
【参考方案1】:我不确定你是否需要转义你的特殊字符,但除此之外(实际上,我的第一次尝试只是按原样发送接收到的字符串而不做任何修改)。一种更简单的解决方案是将您的字符串转换为 unicode 序列 '\U****'。在这种情况下,您的所有符号(包括表情符号)都应该顺利通过。有一个开源 java 库 MgntUtils 有一个实用程序,可以将字符串转换为 unicode 序列,反之亦然:
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
这段代码的输出是:
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
该库可以在Maven Central 或Github 找到它作为 maven 工件并带有源代码和 javadoc
这是StringUnicodeEncoderDecoder类的javadoc
因此,我建议您接收传入的消息并将其转换为 Unicode 序列并发送过来。接收方应该已经将其显示为符号。顺便说一句,相同的工具可以帮助您诊断问题。您可以查看收到的内容并将其解码回字符串。
免责声明:库是我写的
【讨论】:
以上是关于来自 Java 的 Discord Webhook 消息中的表情符号和特殊字符不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Python discord Bot 处理来自一个用户的消息并在 webhook 中发送它们
discord.py,使用 webhook 在所有通道中发送消息
如何从 Discord (webhook) 上的嵌入消息中读取特定文本